已知两点坐标,求直线方程、距离其中一点距离为L的某点
2017-08-28 09:14
831 查看
总觉得代码理应是无所不能的,尤其是在复杂的计算方面。而最近一个项目,要求计算坐标点,这尼玛遇到了要解方程组的情况,还是一元二次方程组。当时整个人都不好了,上网到处搜寻,也无法找到那种可以把表达式列出来,就给你解出来的方法。不过还好,网友的一些代码给了我不少的启发,于是摸出难得一用的纸笔,老老实实在草稿纸上演算,最终有了以下代码:
private void pointXY() { Point curPoint = new Point(20, 30);// 当前坐标 Point nextPoint = new Point(35, 42);// 下个点坐标 double distance = Math.sqrt(Math.pow(curPoint.x - nextPoint.x, 2) + Math.pow(curPoint.y - nextPoint.y, 2));// 两点的坐标距离 double lenthUnit = distance / 5;// 单位长度 // 第一步:求得直线方程相关参数y=kx+b double k = (curPoint.y - nextPoint.y) * 1.0 / (curPoint.x - nextPoint.x);// 坐标直线斜率k double b = curPoint.y - k * curPoint.x;// 坐标直线b // 第二步:求得在直线y=kx+b上,距离当前坐标距离为L的某点 // 一元二次方程Ax^2+Bx+C=0中, // 一元二次方程求根公式: // 两根x1,x2= [-B±√(B^2-4AC)]/2A // ①(y-y0)^2+(x-x0)^2=L^2; // ②y=kx+b; // 式中x,y即为根据以上lenthUnit单位长度(这里就是距离L)对应点的坐标 // 由①②表达式得到:(k^2+1)x^2+2[(b-y0)k-x0]x+[(b-y0)^2+x0^2-L^2]=0 double A = Math.pow(k, 2) + 1;// A=k^2+1; double B = 2 * ((b - curPoint.y) * k - curPoint.x);// B=2[(b-y0)k-x0]; int m = 1; double L = m * lenthUnit; // C=(b-y0)^2+x0^2-L^2 double C = Math.pow(b - curPoint.y, 2) + Math.pow(curPoint.x, 2) - Math.pow(L, 2); // 两根x1,x2= [-B±√(B^2-4AC)]/2A double x1 = (-B + Math.sqrt(Math.pow(B, 2) - 4 * A * C)) / (2 * A); double x2 = (-B - Math.sqrt(Math.pow(B, 2) - 4 * A * C)) / (2 * A); double x = 0;// 最后确定是在已知两点之间的某点 if (x1 == x2) { x = x1; } else if (curPoint.x <= x1 && x1 <= nextPoint.x || nextPoint.x <= x1 && x1 <= curPoint.x) { x = x1; } else if (curPoint.x <= x2 && x2 <= nextPoint.x || nextPoint.x <= x2 && x2 <= curPoint.x) { x = x2; } double y = k * x + b; Point mPoint = new Point((int) x, (int) y); }
相关文章推荐
- 已知两点坐标,及在从其中一点开始移动的距离,求移动到的坐标
- 已知空间一点到另外两点直线的距离
- 已知直线上的两点 A(x1, y1), B(x2, y2) 和另外一点 C(x0, y0),求C点到直线的距离。
- 已知两点经纬度坐标,求其直线距离
- 已知空间一点到另外两点直线的距离
- 已知直线上的两点 A(x1, y1), B(x2, y2) 和另外一点 C(x0, y0),求C点到直线的距离。
- 已知空间一点到另外两点直线的距离
- 已知A,B两点及C点(不在直线AB上)坐标,求在直线AB上距离A点距离为线段AC长度的点D坐标
- 最短路径问题平面上有n个点(n<=100),每个点的坐标均在-10000~10000之间。其中的一些点之间有连线。若有连线,则表示可从一个点到达另一个点,即两点间有通路,通路的距离为两点间的直线距离。
- 已知两点坐标,求两点连成的直线中的某一点坐标
- 屏幕坐标系中 已知两点坐标,第三点在两点的连线内 且已知第三点到两点中任意一点的距离 求第三点的坐标
- 设计一个点类,其中包含一对坐标点数据成员,一个计算两点距离的友元函数和坐标点的显示函数
- 根据点到已知坐标的两点的距离 获取该点坐标
- 已知直线上两点求直线的一般式方程
- 求一点到另外两点所构成的直线的距离
- 已知用经纬度表示的两点,求两点之间的直线距离
- 已知两点经纬度,求一点相对于另一点方位角和两点间的距离
- 已知用经纬度表示的两点,求两点之间的直线距离
- untiy初识之 已知一个中心点,和另一点,求该方向上距离中心点S的点坐标