2014-01-20 3 views
-1

Я рисую кучу дуг, сделав 102 строк (начальная точка, конечная точка, и 100 точек кривой)обработки угла в математике Three.js

проблема возникает, когда дуга имеет начальную точку, которая больше в значении, чем конечная точка. например:

точки старта: 359
конечная точка: 88

в следующем примере, дуга должна быть в пустой области круга http://jsfiddle.net/XsjgH/1/

Я пытался так много вещей. например,

  function getARC(x, y, r, a){ 
    a = a * (Math.PI/180); 
    var ax = +x + +r * Math.cos(+a), 
     ay = +y + +r * Math.sin(+a), 
     res = []; 
     res['x'] = ax, 
     res['y'] = ay; 

    return res; 
} 
function DRAWarc(cx, cy, ra, sa, ea){ 
     var arcFactor = 1; 
      if(+sa > +ea){ 
       arcFactor = -1; 
       var material = new THREE.LineBasicMaterial({ 
        color: 0xff00f0, 
       }); 
      }else{ 
       var material = new THREE.LineBasicMaterial({ 
        color: 0x0000ff, 
       }); 
      } 


      var geometry = new THREE.Geometry(); 

       var s = getARC(cx, cy, ra, sa); 
       geometry.vertices.push(new THREE.Vector3(s['x'], s['y'], 0)); 

       var step = (+ea - +sa)/100; 
       var pass = 0; 
       var reset = 0; 
       for(var i=1;i<=100;i++){ 
        if(+sa > +ea && ((+sa + (+step * +i))*arcFactor) < 360 && reset == 0){ 
         pass = 1; 
        } 
        if(((+sa + (+step * +i))*arcFactor) < sa){ 
         reset = 1; 
         pass = 0; 
        } 
        if(((+sa + (+step * +i))*arcFactor) < ea || pass == 1){ 
         var t = getARC(cx, cy, ra, ((+sa + (+step * +i))*arcFactor)); 
         geometry.vertices.push(new THREE.Vector3(t['x'], t['y'], 0)); 
         //alert((+sa + (+step * +i))); 
        } 
       } 
       reset = 0; 
       var f = getARC(cx, cy, ra, ea); 
       geometry.vertices.push(new THREE.Vector3(f['x'], f['y'], 0)); 

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

     } 
+1

В чем проблема? пожалуйста, также напишите jsfiddle, если сможете. – Shiva

+0

Я добавил jsfiddle – contehhh

ответ

0

Так что я думаю, что понял.

Я добавил этот код для вычисления «шага» между точками на дуге, когда это проблематичная дуга. в основном это делает нулевой угол начала, а затем вычисляет шаг.

Я думаю, проблема в том, что у меня был отрицательный шаг.

   var step; 
        if(sa > ea){ 
         var offset = 360 - sa; 
         step = (+ea + offset)/100; 
        } else { 
         step = (+ea - +sa)/100; 
        } 

и Херес скрипку: http://jsfiddle.net/475Ga/

Edit: (са> еа) сравнивал длину строки, поэтому добавьте + перед каждой переменной, чтобы исправить это.

Смежные вопросы