Libgdx 如何以给定角度进行光线投射?

Libgdx 如何以给定角度进行光线投射?,libgdx,box2d,raycasting,Libgdx,Box2d,Raycasting,绿点是矢量p1,而红点是矢量p2。我可以使用p2.sub(p1.angle()方法访问光线角度 鉴于: float oberserverAngle=p2.cpy().sub(p1.angle() world.rayCast(回调,p1,p2) 现在当我这样做时,视野不正确,我遗漏了什么 shape.line(p1, p2) Vector p3 = p2.cpy().setAngle(oberserverAngle * 0.5f); Vector p4 = p2.cpy().setAngle(-o

绿点是矢量p1,而红点是矢量p2。我可以使用
p2.sub(p1.angle()
方法访问光线角度

鉴于:

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

world.rayCast(回调,p1,p2)

现在当我这样做时,视野不正确,我遗漏了什么

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);

您应该旋转
oberserverAngle
向量,因为您希望从
oberserverAngle
获取左侧的字段,并从该向量获取右侧的字段。在这里,
p2
似乎毫无意义

    Vector p3 = oberserverAngle.rotate(0.5f);
    Vector p4 = oberserverAngle.rotate(-0.5f);

您应该旋转
oberserverAngle
向量,因为您希望从
oberserverAngle
获取左侧的字段,并从该向量获取右侧的字段。在这里,
p2
似乎毫无意义

    Vector p3 = oberserverAngle.rotate(0.5f);
    Vector p4 = oberserverAngle.rotate(-0.5f);

你旋转了一个错误的向量。这应该做到:

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);

要获得图像中所示的结果,您必须拉伸旋转的angleVec

您旋转了一个错误的向量。这应该做到:

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);
p2.cpy().sub(p1).angle();
要达到图像中显示的效果,必须拉伸旋转的angleVec

p2.cpy().sub(p1).angle();
方法返回朝向正y轴且介于0和360之间的角度

我建议你使用

float oberserverAngle = p2.angle(p1);
此方法将返回到-180和+180之间的正y轴的矢量之间的角度

如果你想找到p3和p4角,不要乘以0.5f。 只需添加fov/2f角度即可

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.
方法返回朝向正y轴且介于0和360之间的角度

我建议你使用

float oberserverAngle = p2.angle(p1);
此方法将返回到-180和+180之间的正y轴的矢量之间的角度

如果你想找到p3和p4角,不要乘以0.5f。 只需添加fov/2f角度即可

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.