Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
1. Отрезок Р0Р1 вырождается в точку
4. Прямые совпадают k1=k2 b1=b2 — возможно множество решений
#!/usr/bin/python
print "Hello, Python!"
# input data
x1=0.0
y1=0.0
x2=0.0
y2=0.0
x3=0.0
y3=0.0
x4=0.0
y4=0.0
# logic
if (x1<>x2) and (x3<>x4):
k1=(y1-y2)/(x1-x2)
b1=(x2*y1-x1*y2)/(x2-x1)
k2=(y3-y4)/(x3-x4)
b2=(x4*y3-x3*y4)/(x4-x3)
if k1<>k2:
x=(b2-b1)/(k1-k2)
y=(k2*b1-k1*b2)/(k2-k1)
if (min(x1,x2)<=x<=max(x1,x2)) and (min(x3,x4)<=x<=max(x3,x4)) and (min(y1,y2)<=y<=max(y1,y2)) and (min(y3,y4)<=y<=max(y3,y4)):
print "norm-1 C(",x,";",y,")"
else:
print "none"
else:
if b1==b2:
if max(min(x1,x2),min(x3,x4))<min(max(x1,x2),max(x3,x4)):
print "norm multiple solution C(",max(min(x1,x2),min(x3,x4)),"..",min(max(x1,x2),max(x3,x4)),";",max(min(y1,y2),min(y3,y4)),"..",min(max(y1,y2),max(y3,y4)),")"
else:
if max(min(x1,x2),min(x3,x4))==min(max(x1,x2),max(x3,x4)):
print "norm-2 C(",max(min(x1,x2),min(x3,x4)),";",max(min(y1,y2),min(y3,y4)),")"
else:
print "none"
else:
if ((x1==x2) and (x3<>x4)) or ((x1<>x2) and (x3==x4)):
if x3<>x4:
k=(y3-y4)/(x3-x4)
b=(x4*y3-x3*y4)/(x4-x3)
x=x1
if x1<>x2:
k=(y1-y2)/(x1-x2)
b=(x2*y1-x1*y2)/(x2-x1)
x=x3
y=k*x+b
if (min(x1,x2)<=x<=max(x1,x2)) and (min(x3,x4)<=x<=max(x3,x4)) and (min(y1,y2)<=y<=max(y1,y2)) and (min(y3,y4)<=y<=max(y3,y4)):
print "ex-1 C(",x,";",y,")"
else:
print "none"
else:
if (x1==x2) and (x3==x4) and (x1==x3):
if max(min(y1,y2),min(y3,y4))<min(max(y1,y2),max(y3,y4)):
print "ex multiple solution C(",x1,";",max(min(y1,y2),min(y3,y4)),"..",min(max(y1,y2),max(y3,y4)),")"
else:
if max(min(y1,y2),min(y3,y4))==min(max(y1,y2),max(y3,y4)):
print "ex-2 C(",x1,";",max(min(y1,y2),min(y3,y4)),")"
else:
print "none"
else:
print "none"
x1=1.0
y1=1.0
x2=5.0
y2=5.0
x3=3.0
y3=4.0
x4=4.0
y4=5.0
print "none"
не увидел@@ -31,6 +31,7 @@
print "norm-2 C(",max(min(x1,x2),min(x3,x4)),";",max(min(y1,y2),min(y3,y4)),")"
else:
print "none"
+ print "none"
else:
if ((x1==x2) and (x3<>x4)) or ((x1<>x2) and (x3==x4)):
if x3<>x4:
@@ -31,6 +31,8 @@
print "norm-2 C(",max(min(x1,x2),min(x3,x4)),";",max(min(y1,y2),min(y3,y4)),")"
else:
print "none"
+ else:
+ print "none"
else:
if ((x1==x2) and (x3<>x4)) or ((x1<>x2) and (x3==x4)):
if x3<>x4:
Еще один алгоритм определения пересечения двух отрезков