2016-08-16 3 views
0

enter image description hereWie Raycast mit einem bestimmten Winkel?

Der grüne Punkt ist der Vektor p1 während roter Punkt der Vektor p2 ist. Ich konnte den Strahlwinkel mit der Methode p2.sub(p1).angle() aufrufen.

Gegeben: Jetzt

float oberserverAngle = p2.cpy().sub(p1).angle();

RayCastCallback callback = new RayCastCallback() { 

    @Override 
    public float reportRayFixture(Fixture fixture, Vector2 point, Vector2 normal, float fraction) { 
    }   

} 

world.rayCast(callback, p1, p2);

, wenn ich das tue, ist das FOV nicht richtig, was bin ich dabei?

shape.line(p1, p2) 
Vector p3 = p2.cpy().setAngle(oberserverAngle * 0.5f); 
Vector p4 = p2.cpy().setAngle(-oberserverAngle * 0.5f); 
shape.line(p1, p3); 
shape.line(p1, p4); 

Antwort

1

Sie drehen einen falschen Vektor. Dies sollte es tun:

Vector2 angleVec = p2.cpy().sub(p1); 

shape.line(p1, p2) 
Vector p3 = p1.add(angleVec.cpy().setAngle(oberserverAngle * 0.5f)); 
Vector p4 = p1.add(angleVec.setAngle(-oberserverAngle * 0.5f)); 
shape.line(p1, p3); 
shape.line(p1, p4); 

Um das Ergebnis zu erzielen, wie im Bild gezeigt, würden Sie das gedrehte angleVec der

1

Sie sollten lieber die oberserverAngle Vektor drehen, da Sie das Feld auf der linken Seite von oberserverAngle und auf der rechten Seite von diesem erhalten möchten. Die p2 scheint hier bedeutungslos zu sein.

Vector p3 = oberserverAngle.rotate(0.5f); 
    Vector p4 = oberserverAngle.rotate(-0.5f); 
1
p2.cpy().sub(p1).angle(); 

Methode liefert Winkel in Richtung der positiven y-Achse und zwischen 0 Strecken müssen und 360.

ich schlage vor, Sie

float oberserverAngle = p2.angle(p1); 

Diese Methode Winkel verwenden, um zwischen t zurückkehren o Vektor in Richtung positiver y-Achse zwischen -180 und +180.

Und wenn Sie p3 und p4 Winkel finden möchten, multiplizieren Sie nicht mit 0.5f. Fügen Sie einfach fov/2f angle hinzu.

float oberserverAngle = p2.angle(p1); 
float fov=120f; 

shape.line(p1, p2) 
p2.sub(p1);//p2 became ray vector now you can set angle correctly. 
Vector p3 = p2.cpy().setAngle(oberserverAngle + fov/2f).add(p1); // added p1 now for corrected position 
Vector p4 = p2.cpy().setAngle(oberserverAngle - fov/2f).add(p1); 
shape.line(p1, p3); 
shape.line(p1, p4); 
p2.add(p1);// turning back to p2 for later usages. 
Verwandte Themen