当前位置:  开发笔记 > 后端 > 正文

垂直于给定点的直线

如何解决《垂直于给定点的直线》经验,为你挑选了5个好方法。

如何在给定点的线段上绘制垂线?我的线段定义为(x1,y1),(x2,y2),如果我从点(x3,y3)绘制一个垂直线并且它在点(x4,y4)上遇到线.我想找出这个(x4,y4).



1> Ray Hidayat..:

我为你解决了方程式:

k = ((y2-y1) * (x3-x1) - (x2-x1) * (y3-y1)) / ((y2-y1)^2 + (x2-x1)^2)
x4 = x3 - k * (y2-y1)
y4 = y3 + k * (x2-x1)

其中^ 2表示平方


@jbertron:答案是正确的,但请确保在运行此代码时,将long或double用作所有var的类型,因为使用大数时,计算很容易溢出并且您会得到错误的答案。

2> Mitch Wheat..:

来自维基:

在代数中,对于任何线性方程y = mx + b,垂线都将具有(-1/m)的斜率,与原始斜率的倒数相反.记住"找到垂直线的斜率,翻转分数并改变符号"的口号是有帮助的.回想一下,任何整数a本身都超过一个,可以写成(a/1)

为了找到也通过特定点(x,y)的给定线的垂线,求解方程y =( - 1/m)x + b,用m,x和y的已知值代替求解对于b.

线的斜率m,通过(x1,y1)和(x2,y2)是m =(y1-y2)/(x1-x2)



3> Abraxas..:

我同意peter.murray.rust,矢量使解决方案更清晰:

// first convert line to normalized unit vector
double dx = x2 - x1;
double dy = y2 - y1;
double mag = sqrt(dx*dx + dy*dy);
dx /= mag;
dy /= mag;

// translate the point and get the dot product
double lambda = (dx * (x3 - x1)) + (dy * (y3 - y1));
x4 = (dx * lambda) + x1;
y4 = (dy * lambda) + y1;



4> peter.murray..:

您经常会发现使用矢量可以使解决方案更清晰......

这是我自己的库中的例程:

public class Line2  {

Real2 from;
Real2 to;
Vector2 vector;
Vector2 unitVector = null;


    public Real2 getNearestPointOnLine(Real2 point) {
        unitVector = to.subtract(from).getUnitVector();
        Vector2 lp = new Vector2(point.subtract(this.from));
        double lambda = unitVector.dotProduct(lp);
        Real2 vv = unitVector.multiplyBy(lambda);
        return from.plus(vv);
    }

}

你必须实现Real2(一个点)和Vector2和dotProduct(),但这些应该很简单:

然后代码看起来像:

Point2 p1 = new Point2(x1, y1);
Point2 p2 = new Point2(x2, y2);
Point2 p3 = new Point2(x3, y3);
Line2 line = new Line2(p1, p2);
Point2 p4 = getNearestPointOnLine(p3);

该库(org.xmlcml.euclid)位于:http: //sourceforge.net/projects/cml/

并且有单元测试将执行此方法并向您展示如何使用它.

@Test
public final void testGetNearestPointOnLine() {
    Real2 p = l1112.getNearestPointOnLine(new Real2(0., 0.));
    Real2Test.assertEquals("point", new Real2(0.4, -0.2), p, 0.0000001);
}



5> Dan Lorenc..:

你知道点和斜率,所以新线的等式是:

y-y3=m*(x-x3)

由于线是垂直的,因此斜率是负倒数.你现在有两个方程,可以求解它们的交集.

y-y3=-(1/m)*(x-x3)
y-y1=m*(x-x1)

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有