gpt4 book ai didi

c++ - 平面/射线交点与点/平面投影的区别

转载 作者:行者123 更新时间:2023-11-28 04:30:05 28 4
gpt4 key购买 nike

我在维基百科中找到了射线平面相交代码的解决方案,该解决方案有效,我只是在其中求解线性方程组。

后来我找到了一些点到平面投影的代码,显然实现方式不同,并且在特定条件下也会产生不同的解决方案。

但是,我并没有真正理解点沿 vector 的投影与射线的交点(由点和 vector 构建)之间的区别。在这两种情况下,我都希望找到射线与平面相交的点?!

有没有图可以说明区别?

struct Plane {
glm::vec3 _normal;
glm::vec3 _point;
};

glm::vec3 intersection(const Plane &p, const glm::vec3 &point, const glm::vec3 &direction) {
// See: https://en.wikipedia.org/wiki/Line%E2%80%93plane_intersection
const float t = glm::dot(p._normal, point - p._point) / glm::dot(p._normal, -direction);
return point + t * direction;
}

glm::vec3 orthogonalProjection(const Plane &p, const glm::vec3 &point, const glm::vec3 &direction) {
// from https://stackoverflow.com/questions/9605556/how-to-project-a-point-onto-a-plane-in-3d
const float t = -(glm::dot(point, direction) - glm::dot(p.getOrigin(), p.getNormal()));
return point+ t * direction;
}

最佳答案

射线是一条无限长的线,所以它有一个方向。将射线与平面相交意味着找到直线穿过平面的位置。

点是悬浮在空间某处的无量纲点。将一个点投影到一个平面上意味着发射一条穿过该点并垂直于该平面(称为“法线”)的光线,并查看它的着陆点。

射线已经有方向,点没有。选择投影点的方向是垂直于平面的方向,因为这就是投影的定义方式。

所以你可以有一个特殊情况,其中光线的方向和平面的法线重合,在这种情况下,光线与平面相交并投影恰好位于光线某处的点会导致相同的结果,但这只是一个特例。

关于c++ - 平面/射线交点与点/平面投影的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53192658/

28 4 0
文章推荐: css - 在
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com