首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Java 計算兩直線交點與三角形內外心座標完整指南

     編輯:Java 程式設計入門

一、兩直線交點計算

在平面幾何中,求兩條直線的交點是基礎運算。以下提供一個通用的 Java 實作,利用參數方程法避免斜率不存在的問題。

核心類別設計

class Point {
    double x;
    double y;
    public Point() { this.x = 0; this.y = 0; }
}

class Line {
    Point a;
    Point b;
    public Line() {
        this.a = new Point();
        this.b = new Point();
    }
    // 計算兩直線交點,若平行則返回 u.a
    Point intersection(Line u, Line v) {
        Point res = u.a;
        double t = ((u.a.x - v.a.x) * (v.b.y - v.a.y) - (u.a.y - v.a.y) * (v.b.x - v.a.x))
                / ((u.a.x - u.b.x) * (v.b.y - v.a.y) - (u.a.y - u.b.y) * (v.b.x - v.a.x));
        res.x += (u.b.x - u.a.x) * t;
        res.y += (u.b.y - u.a.y) * t;
        return res;
    }
}

原理說明: 以向量參數形式表達直線 P = A + t(B - A),透過叉積解出參數 t,再代入求得交點座標。此法不需判斷斜率,自動處理垂直線情況。

二、三角形外心計算

幾何概念回顧

  • 外心: 三角形三邊中垂線交點,為外接圓圓心
  • 內心: 三角形三角平分線交點,為內切圓圓心
  • 重心: 三條中線交點
  • 垂心: 三條高線交點

外心座標演算法

利用向量性質:外心 G 滿足 (GA + GB)·AB = (GB + GC)·BC = (GC + GA)·CA = 0。程式碼採用構造中垂線並求交點的方式:

// 三角形外接圓圓心(外心)
Point center(Point a, Point b, Point c) {
    Line u = new Line(), v = new Line();
    // AB 邊中點
    u.a.x = (a.x + b.x) / 2;
    u.a.y = (a.y + b.y) / 2;
    // AB 中垂線方向向量 (垂直於 AB)
    u.b.x = u.a.x + (u.a.y - a.y);
    u.b.y = u.a.y - (u.a.x - a.x);
    // AC 邊中點
    v.a.x = (a.x + c.x) / 2;
    v.a.y = (a.y + c.y) / 2;
    // AC 中垂線方向向量
    v.b.x = v.a.x + (v.a.y - a.y);
    v.b.y = v.a.y - (v.a.x - a.x);
    // 兩中垂線交點即為外心
    return intersection(u, v);
}

優勢: 完全避開斜率計算,無需處理垂直線特例,數值穩定性佳。

三、三角形內心計算

內心座標公式

設三角形頂點 A(x₁,y₁)、B(x₂,y₂)、C(x₃,y₃),對邊長分別為 a=BC、b=CA、c=AB,內心座標為:

x = (a·x₁ + b·x₂ + c·x₃) / (a + b + c)
y = (a·y₁ + b·y₂ + c·y₃) / (a + b + c)

向量證明

內心 M 到三邊距離相等,滿足 a·MA + b·MB + c·MC = 0(向量和)。展開得:

a(x₁ - X) + b(x₂ - X) + c(x₃ - X) = 0
a(y₁ - Y) + b(y₂ - Y) + c(y₃ - Y) = 0

解得上述公式。同理可證:a·OA + b·OB + c·OC = 0(O 為內心)。

內切圓半徑

由海倫公式得面積 S = √[p(p-a)(p-b)(p-c)],其中 p = (a+b+c)/2。內切圓半徑 r = 2S / (a+b+c)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved