问题描述:
以起点(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个点(模拟直线运动)"这个话题涉及到的主要知识点是二维空间中的直线方程和点的位置计算,以及如何根据起点和终点生成一系列等间距的点来模拟直线运动。下面我们将详细探讨这些内容。 首先,我们需要...
### 求点关于直线对称点坐标的一种简便方法 #### 背景与意义 在平面几何中,求解一个点关于某直线的对称点是一个常见的问题。传统的方法通常涉及通过解方程组来找到对称点的坐标,但这往往较为复杂,尤其是在高中...
求点d1到直线d2 d3的距离 并画线 范例: [d dl] find dl [2 1] [8 3] [4 7] ; 则 dl [6 5]
当我们要根据已知直线上两点的坐标,实现鼠标点击时在直线上产生相对位置的点,我们需要涉及到几个关键的数学和编程概念。 首先,我们需要理解直线的斜率公式。如果已知直线上的两个点P1(x1, y1)和P2(x2, y2),那么...
本主题主要关注在二维空间中处理几何问题的一些基本算法,如计算两点之间的距离、判断点是否在直线上、确定点与直线的关系、求解两直线的夹角和交点,以及计算两个矩形的重合面积。以下将详细阐述这些算法的实现原理...
本问题探讨了如何根据两点经纬度(A、B点)以及一个距离(H)来确定位于这两点直线上的第三个点(C点)的经纬度。 首先,我们有两个已知点A(α1,β1)和B(α2,β2),它们之间的距离D可以通过球面距离公式计算...
在这个具体的场景中,"四点计算夹角"可能是指提供四个点来定义两条直线,然后使用上述方法计算它们之间的夹角。使用VB编程,结合数学知识,我们可以轻松地解决这个问题。这个计算方法不仅适用于管道工程,还可以应用...
1. **获取直线方程**:根据直线上的两个点,我们可以很容易地计算出直线的斜率和截距。如果直线是通过点(x1, y1)和(x2, y2)的,那么斜率m = (y2 - y1) / (x2 - x1),截距b = y1 - m * x1。 2. **构建线性方程组**:...
### 求两直线相交的交点C++源代码解析 #### 一、知识点概述 本篇文章将详细解析一个用于求解两直线相交交点的C++源代码实现。该实现适用于任意两条直线(定义为起点和终点),如果这两条直线相交,则返回它们的...
"求c点在ab直线上的垂直交点"可能是项目中的一个具体函数或类,用于演示如何通过Revit API进行此类几何计算。开发者可以查看该项目的源代码,学习如何将这些理论步骤转化为实际的Revit二次开发代码。 总的来说,...
在计算机图形学中,平面直线求交算法是计算几何领域的一个基本问题,它涉及到如何判断两条或多条直线在二维平面上是否相交以及如何找到它们的交点。本主题将详细探讨这一算法,并以C++语言进行实现。 首先,我们...
在JavaScript开发中,特别是在地图应用领域,经常需要计算地图上某个点到直线的最短距离。这在诸如路径规划、地理分析或者交互式地图设计等场景中非常常见。本篇文章将详细探讨如何在JavaScript中实现这个功能,尤其...
总结起来,计算机中的直线描述包括二维和三维空间的表示方法,直线求交涉及线性方程组的求解,而交点的显示、直线的平移和缩放则需要图形学的基本概念和坐标变换。掌握这些知识点,对于理解计算机图形学和开发相关...
### 求两条直线夹角的算法 在计算机图形学、几何处理以及各种与空间位置相关的应用中,计算两条直线之间的夹角是一项基础且重要的任务。本文将详细解析如何通过给定的Java代码来实现这一功能,并深入探讨背后的数学...
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
给定直线上的一个点A,直线的斜率k,以及直线外的点C,我们可以求出点C到直线的投影点B。代码中定义了一个名为`GetProjectivePoint`的方法,接受四个参数:在线上的点`pLine`,直线的斜率`k`,线外的点`pOut`,以及...
在本主题“易语言计算直线点群”中,我们将深入探讨如何使用易语言来处理几何图形中的直线点群问题。 在计算机图形学中,直线点群通常指的是在二维或三维空间中的一组点,这些点按照一定的规律分布,可能形成一条或...
在我们的场景中,我们有一组三维空间中的离散点,目标是找到一条直线,使得所有点到这条直线的距离平方之和最小。 拟合直线的数学表示为 \( ax + by + cz = d \),其中 \( a, b, c \) 是直线的方向向量,\( d \) 是...
### 直线与直线、圆、矩形交点的相关知识点 根据给定的代码片段以及题目描述,我们可以归纳总结出以下关键知识点。 #### 一、面向对象设计与数学原理结合 1. **类的设计**:在面向对象编程中,通过定义类来封装...
函数接收四个 `CSecPoint` 类型的参数,分别表示两条直线上的两个点,并返回一个指向交点的指针。下面对代码进行详细分析: 1. **初始化向量**: - `vector1` 表示由点 `spt1` 和 `spt2` 定义的直线方向向量; - ...