2014-01-28 86 views
0

我有这样几点:绘制弧形three.js所

"POLYLINE":[[ 
     {"x":"-6094.1665707632401","y":"3074.764386330728","r":""}, 
     {"x":"-699.22595358468595","y":"1099.941236568309","r":""},     
     {"x":"-4940.397089330264","y":"576.87996358328382","r":""}, 
     {"x":"-1329.5259580814709","y":"3149.4874087018579","r":"0.5163456475719181"}, 
     {"x":"-6094.1665707632401","y":"3074.764386330728","r":""} 
    ]] 

其中x y是一个折线和r的顶点为半径,如果它是一个弧形。 我可以管理绘制的是,如果这个心不是可能的,但我需要跳过去弧脚本

function DRAWpline(vert){ 
      vert = JSON.parse(vert); 
      var material = new THREE.LineBasicMaterial({ 
       color: 0x0000ff 
      }); 
      var geometry = new THREE.Geometry(); 

      for (var i = 0; i < vert.length; i++) {  
       if(vert[i]['r'] != ""){ 
        geometry.vertices.push(new THREE.Vector3(vert[i]['x'], vert[i]['y'], 0)); 
       } else { 

       } 
      } 

      var line = new THREE.Line(geometry, material); 



      scene.add(line); 
     } 

回答

1

这样的事情,可以做的工作:

var p0 = new THREE.Vector3(vert[i]['x'], 0, 0); 
var p1 = new THREE.Vector3(vert[i]['x'], vert[i]['y'], 0); 
var p2 = new THREE.Vector3(vert[i+1]['x'], vert[i+1]['y'], 0); 
var startAngle = Math.acos(p0.dot(p1)/(p0.length()*p1.length())); 
var angle = Math.acos(p1.dot(p2)/(p1.length()*p2.length())); 
geometry = new THREE.CircleGeometry(radius, nbSegments, startAngle, angle); 
// remove center vertex 
geometry.vertices.splice(0,1); 

上添加一个检查vert [i + 1]在计算p2之前退出

+0

Oups,重新阅读您的帖子后。我想我误解你了。当r被定义为X时,Y是弧的起点还是弧的中心?如果它是中心,我的代码是不正确的 – Troopers

+0

再次感谢芽!我从来没有参加过数学课,我退学了,所以我很难与这个触发器,而不是什么。我最终使用了一个函数来合并几何图形在完成后发布代码。 – contehhh

+0

嘿,你可以仔细检查这段代码吗?我实现了它,它将弧线放在目标位置 – contehhh