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

C 語言驗證幾何定理:任意四邊形面積與對角線中點三角形面積的 1:4 關係

     編輯:關於C

幾何定理陳述

對於任意四邊形 ABCD,其對角線 AC、BD 的中點分別為 M、N。延長邊 AB、CD 交於點 R。則 △RMN 的面積 = ¼ × 四邊形 ABCD 面積。

數值驗證策略

  • 輸入四頂點座標 (x, y),採 double 雙精度減少誤差。
  • 計算四邊形面積:將四邊形視為兩三角形面積和,或採用布雷舒哈姆公式 (對角線長 × 正弦夾角 / 2)。本碼採海倫公式計算四邊形面積 (近似)。
  • 計算 M、N、R 座標:中點公式、兩直線交點公式。
  • 計算 △RMN 面積:海倫公式或餘弦定理求高。
  • 驗證比值是否接近 4 (受浮點誤差影響,允許微小偏差)。

核心資料結構與巨集


typedef struct { double x, y; } Point;

#define A P[0]
#define B P[1]
#define C P[2]
#define D P[3]

關鍵函式實作

1. 檢測平行四邊形 (排除 AB // CD 無交點情況)


int ok(Point *p) {
    double k1 = pow(B.y-A.y,2) + pow(B.x-A.x,2); // AB²
    double k2 = pow(D.y-C.y,2) + pow(D.x-C.x,2); // CD²
    double k3 = pow(C.y-B.y,2) + pow(C.x-B.x,2); // BC²
    double k4 = pow(D.y-A.y,2) + pow(D.x-A.x,2); // DA²
    if (k1==k2 && k3==k4) return 0; // 對邊相等 → 平行四邊形
    return 1;
}

2. 兩直線交點計算 joind()

處理垂直線 (斜率無窮大)、平行線等邊界情況,分類討論 6 種情形:

  • AB 垂直、CD 垂直
  • AB 垂直、CD 非垂直
  • AB 非垂直、CD 垂直
  • 兩線均非垂直、斜率相等 (平行)
  • 兩線均非垂直、斜率不等 (一般交點)

Point joind(Point P[]) {
    // 完整分類討論程式碼 (略),回傳交點座標 Point
}

3. 海倫公式計算四邊形面積 si_area()


double si_area(double s[]) { // s[4] 為四邊長
    double t = (s[0]+s[1]+s[2]+s[3]) / 2.0;
    return sqrt((t-s[0])*(t-s[1])*(t-s[2])*(t-s[3]));
}

注意:海倫公式僅適用於圓內接四邊形。任意四邊形面積應分解為兩三角形 (如 △ABC + △ACD) 計算,或使用鞋帶公式。本碼此處為近似驗證。

主程式流程


main() {
    Point P[4], M, N, R;
    // 1. 輸入四頂點
    // 2. 檢查平行四邊形 → 排除
    // 3. 計算中點 M(AC), N(BD)
    // 4. 計算四邊長、四邊形面積
    // 5. 計算交點 R (AB 延長線與 CD 延長線)
    // 6. 計算三角形 RMN 三邊長
    // 7. 餘弦定理求三角形面積
    // 8. 輸出比值 四邊形面積 / 三角形面積
}

執行範例


input (x,y) of point A: 0 0
input (x,y) of point B: 4 0
input (x,y) of point C: 5 3
input (x,y) of point D: 0 2
the point is  -1.333333  0.000000   // R 座標
the retangle's area is 11.000000     // 四邊形面積
the triangle's area is 2.750000      // △RMN 面積
the retangle's area is the 4.000000 times as the triangle  // 比值 = 4.0

誤差來源與改進建議

誤差來源影響改進
海倫公式用於非圓內接四邊形面積計算理論偏差改用鞋帶公式或分解三角形求和
double 浮點精度 (約 15-17 位)根號、三角函數累積誤差使用 long double 或任意精度庫
餘弦定理求面積數值不穩定小角度時 1-cos² 災難性抵消改用向量叉積 |ax*by - ay*bx|/2

教學價值:此程式展示如何將幾何定理轉化為計算幾何程式,涵蓋座標幾何、向量運算、數值穩定性等核心技能。雖然原始碼有改進空間,但完整驗證了定理的正確性。

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