Hat bölümünün başlangıç ve bitiş koordinatlarını içeren bir sözlüğe sahibim. Satır segmentlerinin bir kesişme olup olmadığını kontrol etmek için sözlükteki iki anahtarın tüm olası kombinasyonlarını karşılaştırmak istiyorum. Bunu nasıl yapabilirim ?Bir sözlükten anahtar çiftlerinin kombinasyonunu seçme
v = {1:[(2,3),(10,12)],2:[(22,25),(14,42)],3:[(-8,10),(3,21)]}
bir çarpışma olup olmadığını belirlemek için fonksiyon hangi olur Sen (2,1)
if x < y
kısım sadece (1,2)
olsun emin olur
comb = ((v[x], v[y]) for x in v for y in v if x < y)
yazmak ama olmayabilir bu
def segment_intersect(line1, line2):
i1 = [min(line1[0][0], line1[1][0]), max(line1[0][0], line1[1][0])]
i2 = [min(line2[0][0], line2[1][0]), max(line2[0][0], line2[1][0])]
ia = [max(i1[0], i2[0]), min(i1[1], i2[1])]
if max(line1[0][0], line1[1][0]) < min(line2[0][0], line2[1][0]):
return False
m1 = (line1[1][1] - line1[0][1]) * 1./(line1[1][0] - line1[0][0]) * 1.
m2 = (line2[1][1] - line2[0][1]) * 1./(line2[1][0] - line2[0][0]) * 1.
if m1 == m2:
return False
b1 = line1[0][1] - m1 * line1[0][0]
b2 = line2[0][1] - m2 * line2[0][0]
x1 = (b2 - b1)/(m1 - m2)
if (x1 < max(i1[0], i2[0])) or (x1 > min(i1[1], i2[1])):
return False
return True
, kabul etmelisiniz (uygun cevabın yanındaki onay işaretine tıklayın). Bu iki şey yapar. Sorununuzu çözdüğünüze herkesin memnun olduğunu bildirir ve size yardım için kredi vermenize yardımcı olan kişiye verir. Tam bir açıklama için [burada] (http://meta.stackexchange.com/a/5235) adresine bakın. –