日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

判断两条直线的位置关系

發布時間:2023/12/20 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 判断两条直线的位置关系 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近在看任意兩個多邊形的交并比。
開始自己想辦法,花了兩天時間,進展比較緩慢。情況越想越多,越來越不可控。于是只有求助與度娘了。雖然還是有些問題,但問題還是慢慢的有些好轉,其中一點心青大神的博客中提到的想法和源碼,給了我很大啟示。
求兩條直線的位置關系中, 大神是用的向量的想法,思路很新穎,但是我有點一知半解,c++轉的python代碼運行也有點問題, 于是我老老實實的在網上補習了一下直線的位置關系, 并用一般表達式做了實現。
其中線段的關系,我分為以下五種:

lines_status = ['coll', 'para','ins', 'coll_on', 'ins_on'] #'coll': 共線, 沒有重合 #'para': 平行 #'ins': 所在的直線相交, 沒有交點 #'coll_on' 共線,有重合部分, 可能重合的交點或者一段線段 #'ins_on' 所在直線相交, 兩個線段有交點 #--------------------------------------- #func: get_2line_status #info: 獲取兩條線段的關系 #return: ["condition", [[point1],[point2]]] # # condition: # 'coll': 共線, 沒有重合, 返回直沒有point1和point2 # 'para': 平行, 返回直沒有point1和point2 # 'ins': 所在的直線相交, 沒有交點, 返回直中有延長線的交點point1 # 'coll_on' 共線,有重合部分, 可能重合的交點或者一段線段, 如果只重合了端點,則返回point1, 如果重合一段線段, 則返回直中有point1和point2 # 'ins_on' 所在直線相交, 兩個線段有交點,則返回point1 #--------------------------------------- def get_2line_status(line1, line2):x1,y1 = line1[0]x2,y2 = line1[1]x3,y3 = line2[0]x4,y4 = line2[1]# 直線表達式ax +by +c =0a = y2-y1b = x1-x2 c = x2*y1 -x1*y2 # 直線表達式ex +fy +g =0e = y4-y3f = x3-x4 g = x4*y3 -x3*y4 # 斜率相等if b*e == a*f: if c*f == g*b and c*e == g*a: #c/b == g/f(能用乘法就不用除法): # 共線if (x1-x3) == 0 or (x1-x4) == 0: coll_=[[x1,y1]] #共點elif (x1-x3)*(x1-x4) < 0: #有公共線段coll_= [[x1,y1]]if (x1-x3)*(x1-x2) > 0: coll_.append([x3,y3])else: coll_.append([x4,y4])elif (x2-x3) == 0 or (x2-x4) == 0: coll_=[[x2,y2]] #共點elif (x2-x3)*(x2-x4) < 0: #有公共線段coll_= [[x2,y2]]if (x2-x3)*(x2-x1) > 0: coll_.append([x3,y3])else: coll_.append([x4,y4])else: return ['coll']return ['coll_on', coll_]else:return ['para']#斜率不等時,計算y軸交點if a != 0 and e != 0:yi = (a*g-e*c)/(b*e-a*f)elif a == 0:yi = -c/b else :yi = -g/f #斜率不等時,計算x軸交點if b != 0 and f != 0:xi = (b*g-f*c)/(a*f-b*e)elif b == 0:xi = -c/a else :xi = -g/e # 判斷交點是否在直線上if point_in_segment((xi,yi),line1) \and point_in_segment((xi,yi),line2):return ['ins_on', [[xi,yi]]]else: return ['ins', [[xi,yi]]]

恩恩,開源時代,希望對大家有所幫助。

總結

以上是生活随笔為你收集整理的判断两条直线的位置关系的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。