【问题标题】:Find perpendicular line and its intersection to a rectangle找到垂直线及其与矩形的交点
【发布时间】: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 处截取。请保持掌声。

标签: c# math


【解决方案1】:

首先弄清楚如何找到两条线的交点(注意平行情况)。

那么如何找到与直线的交点或射线,如果有的话。

那么如何找到一条射线与一条线segment的交点,如果有的话。

然后将它应用到来自 A 的射线和四个边中的每一个上,你就完成了。

提示:您可以将线或射线表示为矢量和点。这样您就可以定义来自 A 的射线,而不必担心与 BC 线的交点(可能不在 B 和 C 之间)。

【讨论】:

    猜你喜欢
    • 2014-06-09
    • 1970-01-01
    • 2020-12-17
    • 2010-12-07
    • 2014-12-06
    • 2018-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多