首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >点之间的反射路径in2d

点之间的反射路径in2d
EN

Stack Overflow用户
提问于 2010-04-20 08:42:28
回答 3查看 553关注 0票数 3

我只是想知道是否有一个很好的(已经实现/记录的)算法来做以下事情

boo! http://img697.imageshack.us/img697/7444/sdfhbsf.jpg

给定任何形状(没有交叉边)和该形状内部的两个点,计算两个点之间的所有路径,使所有反射都是完美的反射。路径长度应该限制在一定的长度内,否则会有无限多的解。我不感兴趣的仅仅是射出光线来尝试猜测我可以接近的距离,我感兴趣的是可以完美做到这一点的算法。基于搜索,而不是基于猜测/改进。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-04-20 09:27:20

不是从光线的角度考虑,而是从粉丝的角度考虑。扇子就是所有从一点射出的光线打在墙上的光线。然后,您可以检查风扇是否包含第二个点,如果包含,则可以确定是哪条射线击中了它。一旦风扇撞到墙上,你可以通过将其原点转置到墙上来计算反射的风扇-通过这样做,所有的风扇基本上都是三角形的。当风扇部分撞到墙上时,会有一些复杂的情况,必须将风扇打碎才能继续。无论如何,由于限制了总距离,所以可以先遍历广度优先或深度优先的反射扇树。

您可能还想研究光能传递方法,这可能类似于我刚才描述的方法,但通常是在3d中完成的。

票数 2
EN

Stack Overflow用户

发布于 2010-04-20 11:44:56

我认为你可以比计算粉丝做得更好。称你的点数为AB。您希望找到从AB的反射路径。

首先在边上反射反射,然后调用A A1。你能画一条从A1B的线,只碰到那条边吗?如果是,这意味着您有一条从AB的路径在边缘上反射。对所有的边都这样做,你就会得到所有存在的单一反射路径。使用反射的属性构建这些路径应该很容易。在此过程中,您需要检查路径是否合法,即它们不会与其他边相交。

通过在所有边中反射A的所有第一代反射,并检查是否可以通过反射边从这些点绘制一条线到B,可以继续查找由两个反射组成的路径。继续执行此搜索,直到反射点与B的距离超过阈值。

我希望这是有意义的。这应该比追逐粉丝和处理他们的分手要容易得多,即使你仍然需要做一些工作。

顺便说一句,这是一个研究得很好的台球场的一角,桌上有各种几何形状的桌子。当然,台球从桌子侧面反弹的方式与光线从镜子上反弹的方式相同,所以这只是思考反射的另一种方式。你可以使用像polygonal billiards unfolding illumination这样的搜索词来深入研究这个问题,尽管数学家倾向于寻找在多边形表上的两个点之间没有台球的情况,而不是直接解决你提出的问题。

票数 4
EN

Stack Overflow用户

发布于 2010-04-20 08:55:46

我不知道任何现有的解决方案来解决这个问题。祝你好运,如果你找到了一个,但如果你没有找到一个完整的指数(关于行数)的第一步将是把它分成两部分:

给出墙A,B,C的有序子集和点P1,P2,计算是否有可能的路径(要么没有解,要么一个唯一的solution).

  • Then生成墙的排列,直到你超过你脑海中的任何限制。

第一部分可以通过一组简单的方程来求解,以找到每次光线反弹所需的角度。然后,检查每条线路与现有线路的冲突,就会告诉您该路径是否可行。

方程式系统的参数为

代码语言:javascript
复制
angle_1 = normal of line A with P1
angle_2 = normal of line B with intersection of line A
angle_3 = normal of line C with ...
angle_n = normal of line N-1 with P2

每个参数都受到命中下一行的约束,这可能不是线性的(我还没有检查过)。如果它们不是,那么您可能不得不选择合适的数值非线性求解器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2671826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档