我知道线段的终点和我想要创建的垂直端盖的距离/大小,但我需要计算垂直线的终点。我一直用45-45-90的三角形和圆点产品将我的头撞在墙上,但我似乎无法让它们合在一起。如何计算垂直线段的终点?
我知道蓝色的点和红色点的距离,我需要找到点红色。
在标记为重复之前,我尝试了发布在this question中的答案,但是结果总是垂直的。
http://rauros.net/files/caps.png http://rauros.net/files/caps.png
我知道线段的终点和我想要创建的垂直端盖的距离/大小,但我需要计算垂直线的终点。我一直用45-45-90的三角形和圆点产品将我的头撞在墙上,但我似乎无法让它们合在一起。如何计算垂直线段的终点?
我知道蓝色的点和红色点的距离,我需要找到点红色。
在标记为重复之前,我尝试了发布在this question中的答案,但是结果总是垂直的。
http://rauros.net/files/caps.png http://rauros.net/files/caps.png
如果B1是2个红点之间的蓝点,B2是其他蓝色的点,然后做到这一点的方法是:
以上所有内容都是相当直接的 - 最棘手的一点就是弄清楚如何在文本中写出它!
这可能是有益的,但 - 矩阵旋转90度:
[ 0 -1 ]
[ 1 0 ]
简单的英语向量解释正是我需要的把这些碎片放在我的头上。谢谢!可惜你没有得到许多赞扬 – basszero 2009-12-17 17:31:04
你知道蓝线的斜率,我们称之为m
。垂直于蓝线的线将有斜率-1/m
。
找到需要一些触发的x坐标,sine \theta = d/delta_x
,其中\ theta是x轴的蓝线的角度,d是距蓝点的红点之一的距离。然后将delta_x
添加/减去要与该线垂直的蓝色点的x坐标。现在您可以使用点斜率公式来计算y坐标。
围绕这一最简单的办法就是不去想在斜率m方面,而是在x和y的变化,这我称之为dx,dy(来自微积分符号)。 原因在于,处理垂直线的斜率是无限的,无论如何,您不需要使用trig函数,此代码将会更快更简单。
dx = x2 - x1;
dy = y2 - y1;
我在这里假设第2点是所需线的交点。好吧,所以垂线与第一个负倒数有斜率。 有两种方法做到这一点:
dx2 = -dy
dy2 = dx
或
dx2 = dy
dy2 = -dx
此相对应的两个方向,一个右转,撇下。
但是,dx和dy被缩放到原始线段的长度。你的垂线有不同的长度。
这里的两个点之间的长度:
double length(double x1, double y1, double x2, double y2) {
return sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1));
}
做你想做的,去一方或另一方是:
double scale = length(whatever length you want to go)/sqrt(dx*dx+dy*dy);
double dx2 = -dy * scale;
double dy2 = dx * scale
,然后再次以相同的另一面。 我刚刚意识到我的例子有点C++,因为我使用sqrt,但差异是微不足道的。请注意,您可以更有效地编写代码,并结合平方根。
这将取决于您希望垂直线与之相符的已知线上的点。你的示例图似乎表明它们处于已知线的中点。 – ZombieSheep 2009-12-17 16:00:35
是的,要在红线的中点相交 – basszero 2009-12-17 16:05:01
相关:[从对角线计算垂直偏移](http://stackoverflow.com/q/17195055/183120)。 – legends2k 2013-10-19 06:01:54