| | |
| | | |
| | | public class PointUtil { |
| | | public static void main(String[] args) { |
| | | double a1 = 1, b1 = 2; |
| | | /*double a1 = 1, b1 = 2; |
| | | double a2 = 3, b2 = 4; |
| | | double x0 = 9, y0 = 9; |
| | | Point p1 = new Point(1, 2); |
| | |
| | | System.out.println("Intersection Point P3: (" + p3[0] + ", " + p3[1] + ")"); |
| | | |
| | | String position = determinePosition(a1, b1, a2, b2, x0, y0); |
| | | System.out.println("Point P is on the " + position + " of the line P1P2."); |
| | | System.out.println("Point P is on the " + position + " of the line P1P2.");*/ |
| | | double x0 = 5, y0 = 5; |
| | | double x1 = 0, y1 = 0; |
| | | double x2 = 2, y2 = 2; |
| | | |
| | | double proportion = calculateProportion(x0, y0, x1, y1, x2, y2); |
| | | if (proportion >= 0) { |
| | | System.out.println("垂足到mstPointStart的距离占整条线段长度的比例是: " + proportion); |
| | | } else { |
| | | System.out.println("垂足不在线段上"); |
| | | } |
| | | } |
| | | |
| | | public static double[] findIntersection(double a1, double b1, double a2, double b2, double x0, double y0) { |
| | |
| | | return "line"; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 计算点到线段的距离占线段长度的比例 |
| | | * @param x0 垂足x点 |
| | | * @param y0 垂足y点 |
| | | * @param x1 起点x点 |
| | | * @param y1 起点y点 |
| | | * @param x2 终点x点 |
| | | * @param y2 终点y点 |
| | | * @return |
| | | */ |
| | | public static double calculateProportion(double x0, double y0, double x1, double y1, double x2, double y2) { |
| | | // 向量 AB |
| | | double ABx = x2 - x1; |
| | | double ABy = y2 - y1; |
| | | |
| | | // 向量 AP |
| | | double APx = x0 - x1; |
| | | double APy = y0 - y1; |
| | | |
| | | // 向量积 AB × AP |
| | | double crossProduct = ABx * APy - APx * ABy; |
| | | |
| | | if (crossProduct == 0) { |
| | | // 点在直线上,判断是否在线段上 |
| | | double dotProduct = APx * ABx + APy * ABy; |
| | | double squaredLengthAB = ABx * ABx + ABy * ABy; |
| | | double t = dotProduct / squaredLengthAB; |
| | | |
| | | if (t >= 0 && t <= 1) { |
| | | return t; // 垂足到mstPointStart的距离占整条线段长度的比例 |
| | | } else if (t < 0) { |
| | | //点在mstPointStart的延长线上 |
| | | return 0; |
| | | } else { |
| | | //点在mstPointEnd的延长线上 |
| | | return 1; |
| | | } |
| | | } else { |
| | | return -1; // 点不在直线上 |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | } |
| | | |