C 程式設計求三角形角平分線與對邊的交點座標

2021-08-13 06:22:43 字數 2714 閱讀 2318

問題:設abc三點,形成三角形,求角平分線與ac的交點座標(x', y')

方案:

1. 已知兩點求直線方程:a(x1,y1), b(x2,y2),求直線line(a-b)的一般直線方程

ax + by + c =0

設b=1,使用y=kx+n轉換

a=-(y2-y1)/(x2-x1)

c=-(x2y1-x1y2)/(x2-x1)

可以設b=(x2-x1), 則a=y1-y2, c=x1y2-x2y1,即

a=y1-y2

b=x2-x1

c=x1y2-x2y1

2. 點到線的距離公式 (ax'+by'+c) / 開根號(a1*a1+b1*b1)

直線:ax + by +c =0;

代入點座標(x',y'),

a. 如果ax'+by'+c > 0 標示 在直線的上側

a. 如果ax'+by'+c = 0 標示 在直線上

c. 如果ax'+by'+c = 0 標示 在直線的下側

abs(ax'+by'+c) 越小,距離直線越近

3.已知角平分線與ac交點到角兩端距離相等,設點為x', y',兩端直線位ab:a1x+b1y+c1=0,  bc:a2x+b2x+c2=0;

距離公式:

交點距離ab:a1x'+b1y'+c1 / 開根號(a1*a1+b1*b1)                     根據直線方程:a1 = y1-y2; b1 = x2-x1; c1 = x1*y2-x2*y1;

交點距離bc:a2x'+b2y'+c2 / 開根號(a2*a2+b2*b2)                    根據直線方程:a2 = y2-y3; b2 = x3-x2; c2 = x2*y3-x3*y2;

另外x',y'在ac上,滿足ac直線方程: a3x+b3y+c3=0;                     根據直線方程:a3 = y3-y1; b3 = x1-x3; c3 = x3*y1-x1*y3;

a3x'+b3y'+c3=0;

設m1 = 開根號(a1*a1+b1*b1), m2=開根號(a2*a2+b2*b2)

基於這些:最終求得x',y'座標

y' =- (c3 + a3 * (c2*m1-c1*m2)/(a1*m2-a2*m1)) / (a3 * (b2*m1 - b1*m2)/(a1*m2-a2*m1) + b3);;

x' =-(b3*y' + c3)/a3;

上面的方法有乙個缺陷:當ac水平時,a3 = 0,x'出現了無窮大,這種情況可以使用座標變換,使ac不與橫座標水平解決!

4.2d座標系旋轉關係

為了便於表述和分析,我們從平面直角座標系出發,座標系o-xy和座標系o'-x'y'的關係如下圖所示:

對於以上座標關係,我們可以作如下描述:座標系o-xy逆時針旋轉theta(或順時針旋轉-theta)後與座標系o'-x'y'重合,或者座標系o『-x』y『順時針旋轉theta(或逆時針旋轉-theta)後與座標系o-xy重合。利用簡單的之間三角形的餘弦定理和正玄定理就可以得到以下公式(格式編輯不太熟,故以影象代替):

示例**:

#include #include#include#include using namespace std;

const double pi = 3.14;

struct point

};point jiaodian(point a, point b, point c)

point d;

/* 直線 ab:a1x + b1y + c1 = 0

*/ double a1 = a.y - b.y;

double b1 = b.x - a.x;

double c1 = a.x * b.y - b.x * a.y;

/* 直線 bc:a2x + b2y + c2 = 0

*/ double a2 = b.y - c.y;

double b2 = c.x - b.x;

double c2 = b.x * c.y - c.x * b.y;

/* 直線 ac:a3x + b3y + c3 = 0

*/ double a3 = c.y - a.y;

double b3 = a.x - c.x;

double c3 = c.x * a.y - a.x * c.y;

double m1 = sqrt(a1*a1 + b1*b1);

double m2 = sqrt(a2*a2 + b2*b2);

d.y = -(c3 + a3 * (c2*m1 - c1*m2) / (a1*m2 - a2*m1)) / (a3 * (b2*m1 - b1*m2) / (a1*m2 - a2*m1) + b3);

d.x = -(b3*d.y + c3)/a3;

/* 將d座標轉換回原來的座標系

*/ if (flag == true)

return d;

}int main()

求大三角形中三角形個數

一道筆試程式設計題要求求乙個大三角形中所有小三角形的個數,大約是下面這種情況 首先想到是的將問題由求邊長為n的三角形個數 求邊長為n 1的三角形個數 求邊長為1的三角形個數 1,回溯求得所有三角形個數。但是再仔細一看因為有重疊三角形和倒置的三角形,所以這個方法不可行。接著找到三角形個數由三部分組成 ...

求三角形性質

作 者 b23 完成日期 2014年 10 月 31 日 版 本 號 v1.0 輸入描述 輸入三角形的三邊 a,b,c,值,根據其數值,判斷是否能構成三角形,若能,還有判斷其三角形的性質 等邊三角形,等腰三角形,直角三角形和任意三角形。using system using system.collec...

C 已知三角形三邊,求三角形的面積

area 根號 s s a s b s c s a b c 2 三角形三邊長度由cin輸入,需判斷三邊是否構成乙個三角形,若是,則計算其面積並輸出,否則輸出錯誤資訊。程式須有兩個函式,乙個函式用來判斷,另乙個函式用來計算三角形的面積 段 include include using namespace...