问题描述:
以起点(x1,y1)和已知点(x2,y2)的直线上,求从起点开始,长度为r的点(所要求的点)的坐标
解决方案:
1.根据直线方程y=kx+b,可以求出k、b的值
2.根据圆的一般方程(x-a)^2+(y-b)^2=r^2,加上上面的公式,就可以计算出来了
实现代码:
public static short[] getStraightLinePoint(int x1, int y1, int x2, int y2,
int radius) {
short x3 = 0;
short y3 = 0;
float k = 0;
float b = 0;
if ((x2 - x1) == 0 && (y2 - y1 == 0)) {
return null;
}
if ((x2 - x1) == 0) {
if (y2 > y1) {
x3 = (short) x1;
y3 = (short) (y1 + radius);
return new short[] { x3, y3 };
} else {
x3 = (short) x1;
y3 = (short) (y1 - radius);
return new short[] { x3, y3 };
}
}
if ((y2 - y1 == 0)) {
if (x2 > x1) {
y3 = (short) y1;
x3 = (short) (x1 + radius);
return new short[] { x3, y3 };
} else {
y3 = (short) y1;
x3 = (short) (x1 - radius);
return new short[] { x3, y3 };
}
}
k = (float) (y2 - y1) / (float) (x2 - x1);
if (k == 0 || k * k + 1 == 0)
return null;
b = y1 - k * x1;
double tmpV = Math.sqrt(Math.abs(((radius * radius - (y1 * y1 + b * b
+ x1 * x1 - 2 * y1 * b)) + (k * b - x1 - k * y1)
* (k * b - x1 - k * y1) / (k * k + 1))
/ (k * k + 1)));
double tmpV2 = (k * b - x1 - k * y1) / (k * k + 1);
x3 = (short) (tmpV - tmpV2);
if ((x2 < x1 && x3 > x1) || (x2 > x1 && x3 < x1)) {
x3 = (short) (-tmpV - tmpV2);
}
y3 = (short) (x3 * k + b);
return new short[] { x3, y3 };
}
仅供参考!
- 大小: 9.6 KB
分享到:
相关推荐
求点关于直线对称点坐标的一种简便方法,绕过了求垂足的方法,直接求对称点坐标。形式简单,容易记忆。
两点求一直线,并求此直线上开始点到结束点(输入)之间的n个点坐标(用于模拟直线运动)。
C++语言实现一些基本算法(两点距离、点是否在直线上、点与直线的关系、两直线的夹角、两直线的交点、两个举行的重合面积等等)
求点d1到直线d2 d3的距离 并画线 范例: [d dl] find dl [2 1] [8 3] [4 7] ; 则 dl [6 5]
通过两个点画一条直线,鼠标点击任意一点,在已知直线上画出相对位置的点。
设两个已知点(A、B点 )经纬度为(α1,β1),(α2,β2),其距离为D,地球半径为R, 行距为H,第三点的经纬度为(α3,β3...第三点:距离前述已知两点(A、B点)组成的直线段上A点的距离为H; C点存在左右两个点
已知两条直线(四点坐标),计算直线的夹角,管道工程上使用
C++球两直线的交点MyPoint setpoint(Line &l,Line &m) { MyPoint p; p.x=(m.b-l.b)/(l.a-m.a); p.y=(l.a*m.b-m.a*l.b)/(l.a-m.a); return p; } 这的MyPoint p; 要加两个参数 而且不能直接用p.x p.y
求两任意直线(起点和端点)相交交点,不相交返回NULL,在WINXP,BCB6.0下面已经过N次测试
主要介绍了c#求直线外一点到该直线的投影点,大家参考使用吧
已经两条直线,计算出夹角。Java代码,经过多次验证正确。
易语言计算直线点群源码,计算直线点群,取直线点群
Labview求外扩圆后直线上一点
该程序属于MFC编程,应用了基本对话框,实现了画直线等基本操作,并能够求出交点
通过记录二值化图像像素点,利用设定的距离阈值参数,然后利用距离阈值参数通过最小二乘法迭代来剔除偏差较大的像素点,进而实现直线拟合,并在原二值化图像上面画上直线,记录直线方程(包括斜率和截距这两个参数)...
提供测试用例,输入三维离散点空间坐标,可以直接获得最小二乘法的空间拟合直线,并可以求出每个离散点到空间直线的距离,方便剔除偏离较大的离散点
代码能够在读入的图片中进行直线、折线的绘制,并能够控制端点标记。这个代码弥补了matlab在原图中绘制图形的缺陷。matlab plot函数绘制的线段,并没有改变读入图片的数据,直接保存图片的矩阵数据,不会保留绘制的...
C++实现三维空间中点到点、点到直线、点到平面的距离计算。
求点到线段所在直线垂线的垂足3. 点到线段的最近点4. 点到线段所在直线的距离 5. 点到折线集的最近距离 6. 判断圆是否在多边形内7. 求矢量夹角余弦 8. 求线段之间的夹角9. 判断线段是否相交10.判断线段是否相交但不...
易语言源码易语言计算直线点群源码.rar 易语言源码易语言计算直线点群源码.rar 易语言源码易语言计算直线点群源码.rar 易语言源码易语言计算直线点群源码.rar 易语言源码易语言计算直线点群源码.rar 易语言源码...