【三角形問題】
輸入任意三個頂點座標(x0,y0)、(x1,y1)、(x2,y2),劃出三角形圖形,求三角形之內切圓
圓心座標,並將原心位置標示(劃)出來。 (需判斷是否三點共線)
各位大大!!小弟我試過多種辦法但還是沒有辦法作出來...希望各位大大可以幫幫小弟
補充說明:三個頂點座標是在完成之後可以自行隨機輸入的,然後交給電腦判斷是否共線,如果有共線就不能成立,如果沒有共線就要讓電腦自己算出內心座標。
Offline
1,共线的判断
设三点分别为 A、B、C,则有向量
u = AB = (Bx-Ax, By-Ay) 记为 (ux, uy)
v = AC = (Cx-Ax, Cy - Ay) 记为 (vx, vy)
若 C 在直线AB上,则向量 u、v 的叉积为0,即
u X v = 0
即 ux * vy - uy * vx =0
2,求内切圆的圆心
内切圆圆心即:三角形两个内角的平分线的交点
(1)求角 ABC 的平分线
设有单位向量
u = BA/|BA| 记为 (ux, uy)
v = BC/|BC| 记为 (vx, vy)
设角 ABC 平分线上任一点为 P(x, y),有向量
w = PB = (x - Bx, y - By) 记为 (wx, wy)
根据角的平分线的性质,向量点积 u.w = v.w,即
ux * wx + uy * wy = vx * wx + vy * wy
这样就得到了直线 AP 的方程,即角 ABC 的平分线方程
(2)求两条直线的交点
给定2条直线的方程,求交点,你自己上网搜索一下克莱姆法则,很简单。我这里不方便写行列式
Offline
http://scratch.mit.edu/projects/SOLOMON_WANG/2900810
这是我编的个一画任意三角形的程序,希望可以帮到你。
a = Val(Text1): b = Val(Text2): c = Val(Text3)
If a < b Then d = a: a = b: b = d
If a < c Then d = a: a = c: c = d
If c + b <= a Then
Label2.Caption = "不能构成三角形"
Else
If b < c Then d = b: b = c: c = d
p = (a + b + c) / 2
s = Sqr(p * (p - a) * (p - b) * (p - c))
Label4.Caption = Round(s, 2)
y = Round(2 * s / a, 2)
x = Sqr(c * c - y * y)
Picture1.Line (0, 0)-(a, 0), vbRed ‘画三角形
Picture1.Line (0, 0)-(x, y), vbRed
Picture1.Line (x, y)-(a, 0), vbRed
r = s / p: w = Atn(y / x) ’r 为三角形内切圆半径 即三角形内切圆y 坐标
z = r / Tan(w / 2) ‘z 为三角形内切圆 x 坐标
If c * c + b * b = a * a Then
Label2.Caption = "构成直角三角形"
Else
If c * c + b * b > a * a Then
Label2.Caption = "构成锐角三角形"
Else
Label2.Caption = "构成钝角三角形"
End If
End If
End If
End Sub
Offline