難易度:難易度
タイトルの説明:
给定两条线段(表示为起点start = {X1, Y1}
和终点end = {X2, Y2}
),如果它们有交点,请计算其交点,没有交点则返回空值。
要求浮点型误差不超过10^-6
。若有多个交点(线段重叠)则返回 X 值最小的点,X 坐标相同则返回 Y 值最小的点。
示例 1:
输入: line1 = {0, 0}, {1, 0} line2 = {1, 1}, {0, -1} 输出: {0.5, 0}
示例 2:
输入: line1 = {0, 0}, {3, 3} line2 = {1, 1}, {2, 2} 输出: {1, 1}
示例 3:
输入: line1 = {0, 0}, {1, 1} line2 = {1, 0}, {2, 1} 输出: {},两条线段没有交点
提示:
- 坐标绝对值不会超过 2^7
- 输入的坐标均是有效的二维坐标
問題解決のアイデア:
アイデア1:多項式を使用して線の交点を解きます。縦線に注意してください。
アイデア2:ソリューションを横断するために二分法を使用します:https://leetcode-cn.com/problems/intersection-lcci/solution/py3er-fen-cha-zhao-fa-si-lu-lai-yuan-yu-zuo -tian-d /
問題解決コード:
私はアイデア1を使用します。
class Solution: def intersection(self、start1:List [int]、end1:List [int]、start2:List [int]、end2:List [int])-> List [float]: orig_x1 = [min(start1 [ 0]、end1 [0])、max(start1 [0]、end1 [0])] #line1 x値の範囲 orig_x2 = [min(start2 [0]、end2 [0])、max(start2 [0 ]、END2 [0])] #LINE2範囲内のxの final_x = [MAX(orig_x1 [0]、orig_x2 [0])、分(orig_x1 [1]、orig_x2 [1])] #2ラインマージX値の範囲の後、final_x [0]> final_x [1]の場合、2つの線xに交差がないこと、および線に交差点がないことを意味します orig_y1 = [min(start1 [1]、end1 [1])、max(start1 [ 1]、end1 [1 ])] orig_y2 = [min(start2 [1]、end2 [1])、max(start2 [1]、end2 [1 ])] final_y = [max(orig_y1 [0]、orig_y2 [0])、min(orig_y1 [1]、orig_y2 [1 ])] #line1垂直、line2不垂直 if start1 [0] == end1 [0] および start2 [ 0]!= end2 [0]: x = start1 [0] y =(end2 [1]-start2 [1])*(x-start2 [0])/(end2 [0]-start2 [0])+ start2 [1 ] rt = [x、y] #line2垂直、line1不垂直 elif start1 [0]!= end1 [0] and start2 [0] == end2 [0]: x = start2 [0] y =(end1 [1]-start1 [1])*(x-start1 [0])/(end1 [0]-start1 [0])+ start1 [1 ] RT = [X、Y] #LINE1、LINE2垂直 ELIF START1 [0] == END1 [0] と START2 [0] == END2 [0]: #2である場合、垂直 IF START1 [0]! START2 = [0]: #2行が一致しない場合は RT = [] 他の: #2破線が一致した場合、交差点があるか否かを判断します。 x = start1 [0] if final_y [0] <= final_y [1 ]: rt = [float(x)、float(final_y [0])] else : rt = [] # LINE1、LINE2ない垂直の 他: A1 =([1] - [1] START1 END1)/(START1 [0] - END1 [0]) B1 = START1 [1] - A1 * START1 [0 ] A2 =(START2 [1] - 。END2 [1])/(START2 [0] - END2 [0]) B2 = START2 [1] - 。A2 * START2 [0] IF A1 = A2 :! #ラインの傾き不等 x =(b2-b1)/(a1- a2) y = a1 * x + b1 if if x> = final_x [0] and x <= final_x [1]: #があるか否かを判定する線分説明 RT = [フロート(X)、フロート(Y)] 他: RT = [] 他: #1 行傾きが等しく IF:B1とB2 == #セグメントが重複する場合、最小点xを取ります。xの最小点が同じ 場合、 final_x [0] <= final_x [1 ]の場合、yの最小値を持つ点が返されます: x = final_x [0] y = a1 * x + b1 rt = [x、y] else : rt = [ ] その他: rt = [] rtを返す
给定两条线段(表示为起点start = {X1, Y1}
和终点end = {X2, Y2}
),如果它们有交点,请计算其交点,没有交点则返回空值。
要求浮点型误差不超过10^-6
。若有多个交点(线段重叠)则返回 X 值最小的点,X 坐标相同则返回 Y 值最小的点。
示例 1:
输入: line1 = {0, 0}, {1, 0} line2 = {1, 1}, {0, -1} 输出: {0.5, 0}
示例 2:
输入: line1 = {0, 0}, {3, 3} line2 = {1, 1}, {2, 2} 输出: {1, 1}
示例 3:
输入: line1 = {0, 0}, {1, 1} line2 = {1, 0}, {2, 1} 输出: {},两条线段没有交点
提示:
- 坐标绝对值不会超过 2^7
- 输入的坐标均是有效的二维坐标
問題解決のアイデア:
アイデア1:多項式を使用して線の交点を解きます。縦線に注意してください。
アイデア2:ソリューションを横断するために二分法を使用します:https://leetcode-cn.com/problems/intersection-lcci/solution/py3er-fen-cha-zhao-fa-si-lu-lai-yuan-yu-zuo -tian-d /