gpt4 book ai didi

java - 如何使用 jmonkeyengine3 (或者可能是另一个库)找到 3D 空间中两条线的交点?

转载 作者:行者123 更新时间:2023-12-02 12:19:30 25 4
gpt4 key购买 nike

起初我尝试了这样的事情:

  Ray ray1 = new Ray();
Vector3f originRay1 = new Vector3f(0, 0, 1);
ray1.setOrigin(originRay1);
Vector3f directionRay1 = new Vector3f(0, 0, -1);
ray1.setDirection(directionRay1 );

Ray ray2 = new Ray();
Vector3f originRay2 = new Vector3f(1, 0, 0);
Vector3f directionRay2 = new Vector3f(-1, 0, 0);
ray2.setDirection(directionRay2 );
ray2.setOrigin(originRay2);

CollisionResults results= new CollisionResults();
int collide = ray1.collideWith(ray2, results);

但这会引发 UnsupportedCollisionException,因此它不能使用两个 Ray 对象来计算。

说实话,当我尝试这个时,我不知道自己期望什么。如果不考虑某种增量/误差幅度或完全不同类型的结果,例如返回两条线之间的最短 vector ,则不可能有任何线碰撞算法。或者至少这样的算法对我来说没有多大意义!

无论如何,我也研究了 Line 和 LineSegment 类,但它们没有实现 Collidable 接口(interface)。然后我寻找一些确实实现 Collidable 的候选人类似于一条线,但我没有看到明确的候选者。

如果可能的话,我宁愿使用 jme3 或 JDK 库,但我愿意阅读其他建议。

正如之前提到的,我必须以某种方式考虑精度。例如,如果线之间的距离低于我作为参数传递的“增量”,则会存在交集,然后如果线之间的最短距离小于该增量,则返回其中一条线上的点。

最佳答案

一种安全的方法是计算两条线之间的最短距离。

这可以通过获取两条线的方向 vector 的叉积来轻松完成,这给出了公共(public)垂线的方向,对其进行归一化,然后计算该 vector 与任何 vector 的标量积从第一条线的点到第二条线的点。

设 vector 方程为

A1 + t1 D1
A2 + t2 D2

然后是距离:

d12 = |(A2 - A1).(D1 x D2)| / |D1 x D2|

如果直线由点 PQRS 给出,

d = |(P - R).((Q - P) x (S - R))| / |(Q - P) x (S - R)|

关于java - 如何使用 jmonkeyengine3 (或者可能是另一个库)找到 3D 空间中两条线的交点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45897542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com