如何以给定角度进行光线投射?
How to raycast with a given angle?
绿点是Vector p1,红点是Vector p2。我可以使用 p2.sub(p1).angle()
方法访问光线角度。
鉴于:
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);
现在当我这样做的时候,视野不对,我错过了什么?
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);
你旋转了一个错误的向量。应该这样做:
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's
p2.cpy().sub(p1).angle();
方法 returns 朝向正 y 轴的角度,介于 0 和 360 之间。
我建议你使用
float oberserverAngle = p2.angle(p1);
此方法将 return 向量与正 y 轴之间的角度介于 -180 和 +180 之间。
如果你想找到 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.
绿点是Vector p1,红点是Vector p2。我可以使用 p2.sub(p1).angle()
方法访问光线角度。
鉴于:
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);
现在当我这样做的时候,视野不对,我错过了什么?
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);
你旋转了一个错误的向量。应该这样做:
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's
p2.cpy().sub(p1).angle();
方法 returns 朝向正 y 轴的角度,介于 0 和 360 之间。
我建议你使用
float oberserverAngle = p2.angle(p1);
此方法将 return 向量与正 y 轴之间的角度介于 -180 和 +180 之间。
如果你想找到 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.