This is a read-only archive of the old Scratch 1.x Forums.
Try searching the current Scratch discussion forums.

#1 2012-06-17 09:44:22

a850208ken
New Scratcher
Registered: 2012-06-16
Posts: 3

三角形內心座標

【三角形問題】
輸入任意三個頂點座標(x0,y0)、(x1,y1)、(x2,y2),劃出三角形圖形,求三角形之內切圓
圓心座標,並將原心位置標示(劃)出來。 (需判斷是否三點共線)


各位大大!!小弟我試過多種辦法但還是沒有辦法作出來...希望各位大大可以幫幫小弟 sad

補充說明:三個頂點座標是在完成之後可以自行隨機輸入的,然後交給電腦判斷是否共線,如果有共線就不能成立,如果沒有共線就要讓電腦自己算出內心座標。

Offline

 

#2 2012-06-24 08:27:52

oldwhy
New Scratcher
Registered: 2012-06-24
Posts: 10

Re: 三角形內心座標

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

 

#3 2012-06-24 12:18:27

oldwhy
New Scratcher
Registered: 2012-06-24
Posts: 10

Re: 三角形內心座標

我创建了一个工程,在屏幕上取3个点,会计算出内切圆心并绘制出来,看看:
http://scratch.mit.edu/projects/oldwhy/2632172

Offline

 

#4 2012-11-11 05:24:03

SOLOMON_WANG
New Scratcher
Registered: 2012-11-10
Posts: 2

Re: 三角形內心座標

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

 

Board footer