2017-02-14 2 views
0

Ich habe ein Matheproblem, mit dem ich kämpfe.Berechne Zielbereich auf Kreis Three.js

Ich habe einen besonderen Radianten ich die Kamera auf (camera.rotation.y) verweisen soll. Ich möchte dem Benutzer mitteilen, ob er nach links oder rechts schwenken muss, um zu diesem Radianten mit einer Toleranz von PI/4 zu gelangen.

Ich habe die pan-Nummer, indem man die Kamera + Dolly Rotation normalisiert

function getCurrentPan(){ 
    return dolly.rotation.y + camera.rotation.y > 0 
     ? (dolly.rotation.y + camera.rotation.y)%Math.PI 
     : ((dolly.rotation.y + camera.rotation.y)%Math.PI) + Math.PI; 
} 

So zwischen 0 und PI ist es immer.

Ich hatte geplant, den Bereich auszuarbeiten, den ich überprüfen kann, um zu sehen, ob der Benutzer nach links oder rechts schwenken muss, um zu diesem Radianten zu kommen. Der Versuch, diesen Code:

 point.leftRange = {}; 
     point.leftRange.min = point.pan - range > 0 ? point.pan - range : Math.PI - point.pan - range; 
     point.leftRange.max = point.leftRange.min - Math.PI/2 - range > 0 ? (point.pan - range)%Math.PI : (Math.PI - (point.leftRange.min - Math.PI/2 - range))% Math.PI; 

     console.log(point.leftRange); 

     point.rightRange = {}; 
     point.rightRange.min = (point.pan + range) % Math.PI; 
     point.rightRange.max = (point.rightRange.min + (Math.PI/2 - range)) % Math.PI; 

     console.log(point.rightRange); 

Was mich so etwas wie

  • point.pan 1,464308692701496
  • left.min 1,071609611002772
  • left.max 0,8918857974908487
  • right.min 1,8570077744002202
  • schenkt
  • right.max 3.0351050194963927

Ein weiterer Ansatz, den ich versucht habe, ist

   var opp = (point.pan - Math.PI/2)%Math.PI; 
       opp = opp > 0 ? opp : Math.PI - opp; 

       if(getCurrentPan() > point.pan && getCurrentPan() < opp) 
        console.log('greater'); 
       else if(getCurrentPan() < point.pan && getCurrentPan() > opp) 
        console.log('less'); 

die wiederum werden nicht berücksichtigt, wenn die Pfanne wie 0,5 und linker Bereich 3 usw. (andere Seite von PI).

Sorry, ich bin diese auch nicht erklären, aber wenn jemand mich in die richtige Richtung zeigen kann ich es schätzen würde!

Antwort

1

Dies ist überentwickelt. Wenn Sie herausfinden wollen, ob ein Ziel nach links oder rechts neben der Kamera ist, tun Sie dies:

d = camera.getworlddirection(); 
diff = target.position - camera.position; 
theta = atan2(diff.x,diff.z) - atan2(d.x,d.z); 

dies ist der Winkel zwischen den Ihre Kamera sucht vs wo das Objekt in Bezug auf die Kamera .

so:

if(abs(theta) < someThreshold){ 
    if(theta > 0){ 
    //its to the right 
    } 
    else{ 
    //its to the left 
    } 
} 
+0

Dank. Das ist nützlich. Das Problem, das ich habe, ist nicht, dass es ein Objekt ist. Aber das könnte gut für das sein - mehr ein gespeicherter Blickwinkel. Ich könnte möglicherweise ein verstecktes Objekt auf diesem Winkel hinzufügen, um dieses zu verwenden, wenn ich es nicht basierend auf dem Winkel tun kann. – user5839

+1

Eigentlich werde ich es so machen. Ich werde die Antwort richtig markieren. – user5839

+0

Was ist der Typ von 'Ziel. position 'und' camera.position' ist diese Art von 'vector3' Ich erhalte Fehler. –