2013-05-22 7 views
8

एक ऐसा फ़ंक्शन बनाने की कोशिश कर रहा है जो 2 लाइन सेगमेंट के बीच कुल ओवरलैपिंग दूरी लौटाएगा, जो प्रारंभ और अंत चींटियों द्वारा दर्शाया गया है।दो 1 डी लाइन सेगमेंट की ओवरलैप दूरी की गणना

वर्तमान में मैं इस है: मैंने कहीं इंटरनेट उतर गया यही कारण है,

def overlap(min1, max1, min2, max2): 
    """returns the overlap between two lines that are 1D""" 
    result = None 
    if min1 >= max2 or min2 >= max1: result = 0 
    elif min1 <= min2: 
     result = max1 - min2 
    else: result = max2 - min1 
    return result 

यह 0 से 100, 0,20 के मामले के लिए हालांकि काम करता है यह 100 रिटर्न और वह स्पष्ट रूप से गलत है। क्या यह गणना करने का एक आसान तरीका है जो सही मान वापस कर देगा?

उत्तर

23
def overlap(min1, max1, min2, max2): 
    return max(0, min(max1, max2) - max(min1, min2)) 

>>> overlap(0, 10, 80, 90) 
0 
>>> overlap(0, 50, 40, 90) 
10 
>>> overlap(0, 50, 40, 45) 
5 
>>> overlap(0, 100, 0, 20) 
20 
+1

मैं इस तरह के एक सरल उत्तर की तरह। –

6

पूरी तरह से परीक्षण नहीं है, लेकिन कैसे के बारे में -

def overlap(min1,max1,min2,max2): 
    start = max(min1,min2) 
    end = min(max1,max2) 
    d = end - start 
    if d < 0: 
     return 0 
    else: 
     return d 

#some tests 
print overlap(0,100,0,20) 
print overlap(5,10,15,20) 
print overlap(1,3,0,5) 
print overlap(-5,5,-2,10) 

>>> 
20 
0 
2 
7 
0

1-डी में ओवरलैप के लिए जांचना के आधार सरल है (मुझे लगता है कि)। minimum मानों का बड़ा और maximum मानों के छोटे से खोजें। फिर दो घटाएं।

def overlap(min1, max1, min2, max2): 
    #Find out the bigger minimum 
    if min1 >= min2: 
     bigger_min = min1 
    else: 
     bigger_min = min2 
    if max1 >= max2: 
     smaller_max = max2 
    else: 
     smaller_max = max1 
    if smaller_max <= bigger_min: 
     return 0 
    else: 
     return smaller_max - bigger_min 

परिणाम

>>> overlap(20,40,30,70) 
10 
>>> overlap(0,100,200,300) 
0 
>>> overlap(0,100,0,30) 
30 
>>> overlap(0,100,30,60) 
30 
>>> overlap(0,100,30,70) 
40 
>>> overlap(20,100,30,70) 
40 
>>> overlap(20,30,30,70) 
0 
>>> overlap(0,50,0,50) 
50 
संबंधित मुद्दे