主要用到的知識點:
在平面直角坐標系內,A(a,b),B(c,d),C(e,f)構成之三角形面積為A,B,C三點最好按逆時針順序從右上角開始取,因為這樣取得出的結果一般都為正值,如果不按這個規則取,可能會得到負值,但只要取絕對值就可以了,不會影響三角形面積的大小。
向量積可以被定義為:模長:(在這里θ表示兩向量之間的夾角(共起點的前提下)(0° ≤ θ ≤ 180°),它位于這兩個矢量所定義的平面上。)def IsTrangleOrArea(x1,y1,x2,y2,x3,y3): return abs((x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2)) / 2.0) 其次,根據面積公式依次計算PAB,PAC,PBC和ABC的面積 :ABC==PAB+PAC+PBC?。如果成立則說明P點在三角形內部,否則不是詳細代碼如下,歡迎指正#-*- coding: utf8 -*-#首先判斷是否是三角形import mathcorA = raw_input("請輸入A點的坐標值:").split(",")x1,y1 = int(corA[0]),int(corA[1])corB = raw_input("請輸入B點的坐標值:").split(",")x2,y2 = int(corB[0]),int(corB[1])corC = raw_input("請輸入C點的坐標值:").split(",")x3,y3 = int(corC[0]),int(corC[1])corP = raw_input("請輸入P點的坐標值:").split(",")x,y = int(corP[0]),int(corP[1])def IsTrangleOrArea(x1,y1,x2,y2,x3,y3): return abs((x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2)) / 2.0)def IsInside(x1,y1,x2,y2,x3,y3,x,y): #三角形ABC的面積 ABC = IsTrangleOrArea(x1,y1,x2,y2,x3,y3) # 三角形PBC的面積 PBC = IsTrangleOrArea(x,y,x2,y2,x3,y3) # 三角形ABC的面積 PAC = IsTrangleOrArea(x1,y1,x,y,x3,y3) # 三角形ABC的面積 PAB = IsTrangleOrArea(x1,y1,x2,y2,x,y) return (ABC == PBC + PAC + PAB)if __name__ =="__main__": #if IsInside(10, 30, 20, 0, 10, 30, 10, 15): if IsInside(x1,y1,x2,y2,x3,y3,x,y): PRint "Inside" else: print "Outside"
新聞熱點
疑難解答