मान लीजिए कि दो गोले हैं जिनकी त्रिज्या मान 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) जैसा है, तब आउटपुट ट्रू होगा, क्योंकि दूसरे गोले में कोई त्वरण नहीं है, इसलिए यह गति नहीं करेगा, लेकिन पहले वाला x दिशा में आगे बढ़ेगा ताकि वे टकराएं।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- px :=pos1[0] - pos2[0]
- py :=pos1[1] - pos2[1]
- pz :=pos1[2] - pos2[2]
- कुल्हाड़ी:=acc1[0] - acc2[0]
- अय:=acc1[1] - acc2[1]
- az :=acc1[2] - acc2[2]
- दा:=कुल्हाड़ी * कुल्हाड़ी + अय * अय + अज़ * अज़
- dp :=px * px + py * py + pz * pz
- सह :=कुल्हाड़ी * px + ay * py + az * pz
- x :=0.0
- यदि दा 0 के समान नहीं है, तो
- x :=- सह / दा
- x :=अधिकतम x, 0
- dis :=वर्गमूल (da * x * x + 2 * co * x + dp)
- यदि डिस −=r1 + r2, तो
- सही लौटें
- अन्यथा झूठी वापसी
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
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