【发布时间】:2012-07-23 22:05:37
【问题描述】:
我有三个点 A、B 和 C 和一个矩形,如下所示。我想知道来自 A 的射线与矩形相交的 x,y 坐标,因为它也必须垂直于来自 BC 的线。我知道如何在 BC 上找到光线将拦截的点,但我似乎无法弄清楚如何从那里延伸以找到它将拦截矩形的点。插图:
这是我用来查找 BC 拦截的代码。
double k = ((By - Cy) * (Ax - Cx) - (Bx - Cx) * (Ay - Cy)) / ((By - Cy) * (By - Cy) + (Bx - Cx) * (Bx - Cx));
double Dx = Ax - k * (By - Cy);
double Dy = Ay + k * (Bx - Cx);
如何扩展 Dx 和 Dy 以截取矩形?
【问题讨论】:
-
这是作业。你应该自己弄清楚。
-
无论如何,您都没有提供任何关于矩形相对于点的表达方式的信息。您如何对这个问题有具体的解决方案?就我而言,这只是猜测 A-B 段的斜率,然后计算垂直 = m,制作一个线性函数 y=mx+a,其中 a 是矩形下侧的 deltaY。最后用同样的方法(从右边)得到 deltaX 使 rect 函数 y=deltaX 并找到两者的交点
-
我应该加上,点总是在矩形内。
-
离开我的头顶,如果点
D是您的矩形截距,如果您有一般线 AD 的点角(或点斜率)方程,则在 X 和矩形各边的 Y 值。在 4 个答案中,有 2 个与您的原始角度方向相同(另外 2 个方向相反)。在剩下的两个中,取最短的线段。最短的线将是你的拦截。编辑:您可能需要检查您的AD线是水平/垂直的极端情况,这实际上更加简化了问题。 -
@JustinBrown 根据您的算法,您可能还需要考虑 "corner case",其中线恰好在 corner 处截取。请保持掌声。