أكثر

هل تبحث عن تقاطع بين دائرتين عند إعطاء خط العرض / الطول ونصف القطر؟


أحاول حساب تقاطع دائرتين على الأرض مع خط عرض وخط طول ونصف قطر معين. لقد بدأت بهذا التقاطع الحسابي لدائرتين؟

لن يزيد قطر هذه الدوائر عن 100 كيلومتر وستكون عادة "قريبة" من بعضها البعض ، مما يعني نقطتين متقاطعتين للزوج من الدوائر.

لقد أضفت تعليقًا في الكود أدناه في المكان الذي أواجه فيه المشكلة.

لقد طرحت هذا السؤال في الأصل على StackOverflow ، لكن نظرًا لكون هذا الأمر جغرافيًا مكانيًا ، لم أحصل على أي إجابات.

var Circle1 = {lat: 37.673442، lon: -90.234036، r: 107.5} ؛ var Circle2 = {lat: 36.109997، lon: -90.953669، r: 145} ؛ وظيفة findInterscetionOfTwoCircles (دائرة 1 ، دائرة 2) {var c1 = latLonToGeocentricCoords (دائرة 1) ؛ var c2 = latLonToGeocentricCoords (دائرة 2) ؛ var r1 = convertRadius (Circle1.r) ، var r2 = convertRadius (Circle2.r) ، var c1dotc2 = calculateDotProduct (c1، c2) ؛ // هذا هو المكان الذي تحدث فيه المشكلة. // يجب أن تكون قيمة "a" 0.9735030 ولكني أحصل على 46.770178816522844. // أنا متأكد من صحة r1 و r2 (تطابق القيم الموجودة في المنشور الأصلي). بالإضافة إلى ذلك ، أعتقد أن دالة calculateDotProduct هي // صحيحة ، مما يجعل c1dotc2 صحيحًا. أعتقد أنني استبعدت // أي خطأ في ترتيب العمليات. ربما هي قضية تحويل درجة / راديان // أو شيء من هذا القبيل؟ لقد جربت أشكالًا مختلفة وأنا الآن خرجت من الأفكار. var a = (Math.cos (r1) - (Math.cos (r2) * c1dotc2)) / (1 - (c1dotc2 * c1dotc2)) ؛ var b = (Math.cos (r2) - (Math.cos (r1) * c1dotc2)) / (1 - (c1dotc2 * c1dotc2)) ؛ // -45.83805010474024 ، يجب أن يكون 0.0260194 var n = calculateCrossProduct (c1، c2) ؛ var x0 = calculateLinearCombination (a، b، c1، c2) ؛ var ndotn = calculateDotProduct (n، n) ؛ // var t = Math.sqrt ((1 - calculateDotProduct (x0، x0)) / calculateDotProduct (n، n)) ؛ // إنهاء الخوارزمية} دالة latLonToGeocentricCoords (دائرة) {var x = Math.cos (degToRad (Circle.lon)) * Math.cos (degToRad (Circle.lat)) ؛ var y = Math.sin (degToRad (Circle.lon)) * Math.cos (degToRad (Circle.lat)) ؛ var z = Math.sin (degToRad (Circle.lat)) ؛ إرجاع {x: x، y: y، z: z}؛ } function geocentricCoordsToLatLon (x، y، z) {var lon = Math.atan2 (x، y) var lat = Math.atan2 (Math.sqrt ((x * x) + (y * y))، z) return { خط العرض: خط الطول ، خط الطول: خط الطول} ؛ } function convertRadius (radius) {// يحول NM الآن إرجاع degToRad (radius) / 60 ؛ } function calculateDotProduct (input1، input2) {if (arguments.length! == 2) {throw new Error ('يجب توفير وسيطين لهذه الطريقة.')؛ } if (Array.isArray (input1)! == Array.isArray (input2) || typeof input1! == typeof input2) {throw new Error ('المدخلات يجب أن تكون من نفس الأنواع.')؛ } var dotProduct = 0 ؛ if (Array.isArray (input1)) {// العملية كمصفوفات متوازية if (input1.length === input2.length) {throw new Error ('يجب أن تكون أطوال الإدخال هي نفسها.') ؛ } لـ (var i = 0، len = input1.length؛ i 

الدائرة 1 مع r = 107.5 naut.mile والدائرة 2 مع r = 145 يتقاطع الميل عند نقاط كما هو موضح في الصورة:

يجب على المرء أن يعتمد نظام إحداثيات (ديكارت) مسقط لهذا النوع من العمل. لقد عملت على UTM-Zone 15 لأن مركز الدائرة يقع في هذه المنطقة. إذا حاولت القيام بذلك يدويًا / رياضيًا باستخدام نظام الإحداثيات القطبية ، فسيكون الأمر معقدًا للغاية بسبب شكل الأرض غير المثالي. يمكن للمرء إجراء حسابات أكثر دقة من خلال اعتماد أفضل نظام إسقاط / إحداثيات لهذه المنطقة.


شاهد الفيديو: اوضاع دائرتين بالنسبة لبعضهما. رياضيات. الصف الثالث الإعدادي (شهر اكتوبر 2021).