获取对角线段中的某一点的算法

3

看这张图片(抱歉,我只有工作机器上的画笔):

enter image description here

在这里,您可以看到两个黑色矩形,一个主要的和一个次要的,在主要矩形内部。考虑它们是

元素。红色点是每个矩形的中心点(上和左)。

绿色矩形是一个物理边界(不在屏幕上绘制),对称地包围主矩形,由JavaScript计算得出。

蓝色线段是这两个红点的对角线。

我已经在JavaScript中计算了上述对象的所有位置。

黄点是我想得到的点。它必须在红点的对角线上,但在边界(绿线)上。它不能在外面或里面。

我用我的算法创建了jsFiddle。正如您所看到的,黄点在绿色边界之外。它必须在对角线段上,并且超过绿线限制。

有关此算法的任何帮助?


1
该算法目前完全忽略了绿色框。请考虑由您计算得出的两个中心点形成的线的方程。然后考虑垂直于绿色框左侧的竖直线的方程和顶部水平线的方程(如果绿色左侧/上部是坐标系轴,则这些显然是微不足道的,y=0或x=0)。使用标准代数,您可以找到哪一个与您确定的中心线相交以及交点的坐标。 - lurker
@mbratch 抱歉,你的答案看起来很简单,但我无法想象如何在我的代码中遵守它。 - DontVoteMeDown
NP。看起来Sacho在他的回答中已经帮我省去了拼写方程的麻烦。 :) - lurker
1个回答

7
更多关于斜率的内容请参考:https://www.khanacademy.org/math/algebra/linear-equations-and-inequalitie/slope-and-intercepts/v/slope-of-a-line 你可以使用点斜式公式来找到直线上的点(以便找到与绿色顶部线相交的那个点):
(x1, y1) - one of the red points
(x2, y2) - another of the red points
(x, y) - the green point
slope = (y2 - y1) / (x2 - x1) 
y - y1 = slope * (x - x1)

编辑:感谢Imre Kerr提供的帮助:

现在,您已经拥有了点的y坐标(如果您的线与顶部绿线相交)或点的x坐标(如果它与左侧绿线相交)。从这个坐标,您可以找到另一个坐标。以下是一个示例,假设您正在与顶部线相交(http://jsfiddle.net/BGSacho/TDH7q/6/)。


1
绿色框足够高(或者换句话说,主要框距离绿色框顶部足够远)以至于对角线与左侧相交而不是顶部吗? - lurker
非常感谢您,我会为这样好的答案投上十个赞(如果可以的话)。 - DontVoteMeDown
2
@mbratch:这是可能发生的。如果你尝试解出 x,结果小于绿色框左侧,那么只需要简单地解出 y(将 x 视为常量)。 - Imre Kerr
@ImreKerr,求解y的算法是什么? - DontVoteMeDown
y = 斜率 * (x - x1) + y1。只需重新排列方程即可。 - Imre Kerr
@ImreKerr 如果不介意的话,您能提供一下相交绿线右侧和底部的方程式吗?我在代数方面比较菜。 - DontVoteMeDown

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接