以编程方式查找射线和平面的交点?

Posted

技术标签:

【中文标题】以编程方式查找射线和平面的交点?【英文标题】:Finding the intersection of a ray and a plane programmatically? 【发布时间】:2021-09-20 16:12:34 【问题描述】:

我理解这里的数学:http://lousodrome.net/blog/light/2020/07/03/intersection-of-a-ray-and-a-plane/

这是我对他的方程式的实现:

    Vector3 difference = plane_point - ray_origin;
    double product_1 = difference.dot(plane_normal);
    double product_2 = ray_direction.dot(plane_normal);
    double distance_from_origin_to_plane = product_1 / product_2;
    Vector3 intersection = ray_origin - ray_direction * distance_from_origin_to_plane;

但是,除非我将第一行更改为:

Vector3 difference = ray_origin - plane_point;

但我不知道为什么会这样。他的数学很合理。工作代码没有意义。

谁能解释这是怎么回事?

【问题讨论】:

可以在标签中添加语言吗? 不应该 ray_origin - plane_point;绝对功能? intersection = ray_origin - ray_direction * distance_from_origin_to_plane; 听起来不正确,假设变量名称都是正确的。 (应该是+ 您确定代码中所有轴的符号都与示例中的相同吗?或者您的代码中的所有标志都在正确的位置?我感觉有什么不对劲 【参考方案1】:

apple apple 在 cmets 中回答了它。最后一行应该是 + 而不是 -。

现在有意义的工作代码是:

    Vector3 difference = plane_point - ray_origin;
    double product_1 = difference.dot(plane_normal);
    double product_2 = ray_direction.dot(plane_normal);
    double distance_from_origin_to_plane = product_1 / product_2;
    Vector3 intersection = ray_origin + ray_direction * distance_from_origin_to_plane;

【讨论】:

以上是关于以编程方式查找射线和平面的交点?的主要内容,如果未能解决你的问题,请参考以下文章

平面/射线交点与点/平面投影的差异

射线平面相交怎么做?

hdu 2050.折线分割平面

射线箱相交理论

平面分割

cad三维制图中如何找到一条线与一个面的交点,如空间斜线与水平标高24M面的交点,如何找到该交点