Libgdx 如何以给定角度进行光线投射?
绿点是矢量p1,而红点是矢量p2。我可以使用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
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.