Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Python

पायथन में जांचना कि दो गोले 3D स्पेस में त्वरण से कभी मिल सकते हैं या नहीं


मान लीजिए दो गोले हैं जिनकी त्रिज्या r1 और r2 है। वे (x1, y1, z1) और (x2, y2, z2) कोऑर्डिनेट्स पर हैं। और उनके त्वरण मान दिए गए हैं जैसे (ax1, ay1, az1) और (ax2, ay2, az2)। हमें जांचना है कि क्या ये दो गोले दिए गए त्वरण के साथ चलने पर 3D स्पेस में कभी मिलेंगे या नहीं।

उदाहरण के लिए, यदि इनपुट है r1 = 1, r2 = 2, pos1 = (0, 0, 0), acc1 = (100,0,0), pos2 = (4, 0, 0), acc2 = (0,0,0), तो आउटपुट होगा True, क्योंकि दूसरा गोला त्वरण नहीं होने के कारण नहीं चलेगा, लेकिन पहला x दिशा में चलेगा तो वे टकराएंगे।

समाधान दृष्टिकोण

सापेक्ष गति का विश्लेषण करें। सापेक्ष स्थिति p = pos1 - pos2, सापेक्ष त्वरण a = acc1 - acc2। समय t पर दूरी |p + 0.5*a*t^2| है। न्यूनतम दूरी ढूंढें (टाइम t = - (p·a) / |a|^2 पर यदि a ≠ 0) और जांचें कि क्या यह r1 + r2 से कम या बराबर है।

  • सापेक्ष स्थिति px, py, pz और सापेक्ष त्वरण ax, ay, az की गणना करें।
  • da = ax²+ay²+az², dp = px²+py²+pz², co = ax*px+ay*py+az*pz की गणना करें।
  • इष्टतम समय x = max(-co/da, 0) (यदि da != 0) की गणना करें।
  • न्यूनतम दूरी sqrt(da*x² + 2*co*x + dp) की गणना करें।
  • True लौटाएं यदि dis <= r1 + r2 अन्यथा False।

पायथन कार्यान्वयन

def solve(r1, r2, pos1, acc1, pos2, acc2):
    px, py, pz = pos1[0] - pos2[0], pos1[1] - pos2[1], pos1[2] - pos2[2]
    ax, ay, az = acc1[0] - acc2[0], acc1[1] - acc2[1], acc1[2] - acc2[2]
    da = (ax * ax + ay * ay + az * az)
    dp = (px * px + py * py + pz * pz)
    co = (ax * px + ay * py + az * pz)
    x = 0.0
    if da != 0:
        x = - co / da
    x = max(x, 0)
    dis = (da * x * x + 2 * co * x + dp) ** 0.5
    if dis <= r1 + r2:
        return True
    else:
        return False

r1 = 1
r2 = 2
pos1 = (0, 0, 0)
acc1 = (100,0,0)
pos2 = (4, 0, 0)
acc2 = (0,0,0)
print(solve(r1, r2, pos1, acc1, pos2, acc2))

इनपुट

1, 2, (0, 0, 0), (100,0,0), (4, 0, 0), (0,0,0)

आउटपुट

False

  1. Python में दो ट्री नोड्स को स्वैप करके बनाए जा सकते हैं या नहीं, इसकी जांच करने का प्रोग्राम Python में दो ट्री नोड्स को स्वैप करके बनाए जा सकते हैं या नहीं, इसकी जांच करने का प्रोग्राम

    मान लीजिए हमारे पास दो ट्री हैं, हमें यह जांचना है कि क्या हम पहले ट्री को दूसरे में किसी भी नोड के बाएं और दाएं सबट्री को कितनी भी बार स्वैप करके बदल सकते हैं। तो, यदि इनपुट इस तरह है तो आउटपुट True होगा। इसे हल करने के लिए, हम इन चरणों का पालन करेंगे: que1 := root0 के साथ प्रारंभ एक कतार que2

  1. - पायथन में दो आयतों के ओवरलैप की जांच करने का प्रोग्राम

    मान लीजिए हमारे पास एक आयत है जिसे चार तत्वों की सूची [x1, y1, x2, y2] के रूप में दर्शाया गया है, जहां (x1, y1) उसके निचले-बाएं कोने के निर्देशांक हैं, और (x2, y2) उसके ऊपरी-दाएं कोने के निर्देशांक हैं। दो आयत ओवरलैप होते हैं जब उनके प्रतिच्छेदन का क्षेत्रफल धनात्मक होता है। केवल कोने या किनारों को

  1. - पायथन में दो स्ट्रिंग्स के भागों के पैलिंड्रोम होने की जांच करने का प्रोग्राम

    मान लीजिए हमारे पास समान लंबाई की दो स्ट्रिंग्स S और T हैं, हमें जांचना है कि क्या दोनों स्ट्रिंग्स को एक सामान्य बिंदु पर काटना संभव है ताकि S का पहला भाग और T का दूसरा भाग मिलकर एक पैलिंड्रोम बनाएं। उदाहरण के लिए, यदि इनपुट S = cat, T = pac है, तो आउटपुट True होगा, क्योंकि यदि हम स्ट्रिंग्स को c