Saya mencoba mencari cara untuk mendapatkan secara matematis poin-poin umum dari dua lingkaran berpotongan pada permukaan bumi yang diberi pusat Lat / Lon dan jari-jari untuk setiap titik.
Misalnya, diberikan:
- Lat / Lon (37.673442, -90.234036) Radius 107,5 NM
- Lat / Lon (36.109997, -90.953669) Radius 145 NM
Saya harus menemukan dua titik persimpangan dengan salah satunya adalah (36.948, -088.158).
Akan mudah untuk menyelesaikan ini pada bidang datar tapi saya tidak punya pengalaman memecahkan persamaan pada bidang yang tidak sempurna seperti permukaan bumi.
Jawaban:
Ini tidak jauh lebih sulit di bidang daripada di pesawat, setelah Anda menyadari itu
Poin yang dimaksud adalah persimpangan timbal balik dari tiga bola: bola yang berpusat di bawah lokasi x1 (di permukaan bumi) dari jari-jari yang diberikan, bola yang berpusat di bawah lokasi x2 (di permukaan bumi) dari jari-jari yang diberikan, dan bumi itu sendiri , yang merupakan bola yang berpusat pada O = (0,0,0) dari radius yang diberikan.
Perpotongan masing-masing dari dua bola pertama dengan permukaan bumi adalah sebuah lingkaran, yang mendefinisikan dua bidang. Oleh karena itu, persimpangan timbal balik dari ketiga bola terletak di persimpangan dua bidang: garis .
Akibatnya, masalah dikurangi menjadi memotong garis dengan bola, yang mudah.
Berikut detailnya. Inputnya adalah titik P1 = (lat1, lon1) dan P2 = (lat2, lon2) di permukaan bumi, dianggap sebagai bola, dan dua jari-jari yang bersesuaian r1 dan r2.
Konversi (lat, lon) ke (x, y, z) koordinat geosentris. Seperti biasa, karena kita dapat memilih satuan pengukuran di mana bumi memiliki satuan jari,
Pada contoh, P1 = (-90.234036 Derajat, 37.673442 Derajat) memiliki koordinat geosentris x1 = (-0.00323306, -0.7915, 0.61116) dan P2 = (-90.953669 Derajat, 36.109997 Derajat) memiliki koordinat geosentris x2 = (-0.0134464, -0.80777575 , 0,589337).
Konversikan jari-jari r1 dan r2 (yang diukur di sepanjang bola) menjadi sudut di sepanjang bola. Menurut definisi, satu mil laut (NM) adalah 1/60 derajat busur (yaitu pi / 180 * 1/60 = 0,0002908888 radian). Oleh karena itu, sebagai sudut,
The geodesik lingkaran radius r1 sekitar x1 adalah persimpangan permukaan bumi dengan Euclidean lingkup radius dosa (r1) berpusat di cos (r1) * x1.
Pesawat ditentukan oleh persimpangan bola radius sin (r1) di sekitar cos (r1) * x1 dan permukaan bumi tegak lurus dengan x1 dan melewati titik cos (r1) x1, di mana persamaannya adalah x.x1 = cos (r1) ("." mewakili produk titik biasa ); demikian juga untuk pesawat lainnya. Akan ada titik unik x0 pada persimpangan dua bidang yang merupakan kombinasi linear dari x1 dan x2. Menulis x0 = a x1 + b * x2 dua persamaan planar
Menggunakan fakta bahwa x2.x1 = x1.x2, yang akan saya tulis sebagai q, solusinya (jika ada) diberikan oleh
Dalam contoh yang sedang berjalan, saya menghitung a = 0,973503 dan b = 0,0260194.
Jelas kita membutuhkan q ^ 2! = 1. Ini berarti bahwa x1 dan x2 tidak bisa menjadi titik yang sama atau titik antipodal.
Sekarang semua titik lain pada garis perpotongan kedua bidang berbeda dari x0 dengan kelipatan beberapa vektor n yang saling tegak lurus terhadap kedua bidang. Produk silang
apakah pekerjaan yang diberikan n adalah bukan nol: sekali lagi, ini berarti bahwa x1 dan x2 tidak bertepatan atau bertolak belakang. (Kita perlu berhati-hati untuk menghitung produk silang dengan presisi tinggi, karena itu melibatkan pengurangan dengan banyak pembatalan ketika x1 dan x2 berdekatan satu sama lain.) Dalam contoh, n = (0,0272194, -0.00631254, -0.00803124) .
Oleh karena itu, kami mencari hingga dua titik dari bentuk x0 + t * n yang terletak di permukaan bumi: yaitu, panjangnya sama dengan 1. Secara ekivalen, panjang kuadratnya adalah 1:
Istilah dengan x0.n menghilang karena x0 (menjadi kombinasi linear dari x1 dan x2) adalah tegak lurus terhadap n. Dua solusi mudah adalah
dan negatifnya. Sekali lagi presisi tinggi diperlukan, karena ketika x1 dan x2 dekat, x0.x0 sangat dekat dengan 1, yang menyebabkan hilangnya presisi floating point. Dalam contoh, t = 1.07509 atau t = -1.07509. Oleh karena itu, dua titik persimpangan sama
Akhirnya, kami dapat mengonversi solusi ini kembali ke (lat, lon) dengan mengubah geosentris (x, y, z) ke koordinat geografis:
Untuk bujur, gunakan arctangent umum kembali nilai-nilai dalam kisaran -180 sampai 180 derajat (dalam aplikasi komputasi, fungsi ini mengambil kedua x dan y sebagai argumen bukan hanya rasio y / x; kadang-kadang disebut "atan2").
Saya mendapatkan dua solusi (-88.151426, 36.989311) dan (-92.390485, 38.238380), ditunjukkan dalam gambar sebagai titik kuning.
Sumbu menampilkan koordinat geosentris (x, y, z). Patch abu-abu adalah bagian dari permukaan bumi dari -95 ke -87 derajat bujur, 33 hingga 40 derajat lintang (ditandai dengan graticule satu derajat). Permukaan bumi telah dibuat sebagian transparan untuk menunjukkan ketiga bola. Kebenaran dari solusi yang dihitung terbukti dengan bagaimana titik kuning duduk di persimpangan bola.
sumber
Kasus ellipsoidal :
Masalah ini adalah generalisasi dari salah satu dari menemukan batas-batas laut yang didefinisikan sebagai "garis tengah" dan ada literatur yang luas tentang topik ini. Solusi saya untuk masalah ini adalah dengan memanfaatkan proyeksi azimut yang sama:
Algoritma ini menyatu secara kuadrat dan menghasilkan solusi yang akurat pada ellipsoid. (Akurasi diperlukan dalam hal batas laut, karena menentukan hak penangkapan, minyak, dan mineral.)
Rumus diberikan dalam Bagian 14 Geodesics pada ellipsoid revolusi . Proyeksi azimut equidistant ellipsoidal disediakan oleh GeographicLib . Versi MATLAB tersedia di proyeksi Geodesic untuk ellipsoid .
sumber
Berikut adalah beberapa kode R untuk melakukan ini:
sumber
Mengikuti dari jawaban @ whuber , inilah beberapa kode Java yang berguna karena dua alasan:
Itu tidak dioptimalkan atau lengkap (saya sudah meninggalkan kelas yang jelas suka
Point
), tetapi harus melakukan trik.Juga, yang penting, perhatikan penggunaan
atan2
- ini kebalikan dari apa yang Anda harapkan dari jawaban @ whuber (saya tidak tahu mengapa, tetapi berfungsi):sumber
Bekerja kode 'R' untuk jawaban @wuhber.
sumber
Jika salah satu lingkaran adalah Nortstar, maka ada cara termudah dengan unit sphere.
Anda dapat mengukur garis lintang Anda dengan Nortstar. Maka Anda memiliki posisi relatif di bidang ini. v1 (0, sin (la), cos (la)) Anda tahu posisi (sudut) bintang lain (star2), dari almanach. v2 (sin (lo2) * cos (la2), sin (la2), cos (lo2) * cos (la2)) vektor-vektornya. Dari persamaan bola.
lo2 adalah garis bujur relatif. Itu tidak diketahui .
Sudut antara Anda dan star2, Anda dapat mengukur juga, (m) Dan Anda tahu, produk dalam dari dua satuan vektor adalah cos (sudut) di antaranya. cos (m) = titik (v1, v2) u dapat menghitung sekarang garis bujur relatif (lo2). lo2 = acos ((cos (m) -sin (la) * sin (la2)) / (cos (la) * cos (la2)))
Setelah semua, Anda menambahkan bujur nyata dari star2 ke lo2. (atau sub, tergantung pada sisi barat dari Anda, atau timur.) lo2 sekarang adalah bujur Anda.
Maaf untuk bahasa Inggris saya, saya tidak pernah belajar bahasa ini.
2 hal: Bintang kutub utarastar.
Lain. Karena sudut yang diukur untuk mendatar secara relatif, selalu perlu koreksi 90 sudut. Ini berlaku untuk sudut m juga.
ps: sudut pandang sebenarnya: posisi bintang - koreksi waktu.
sumber