Dengan 4 poin yang menggambarkan 2 segmen garis, bagaimana Anda menghitung jika garis A mengarah atau jauh dari garis B?
2 garis memiliki panjang tetap, dan dapat diukur sebagai jarak dari x1 / y1 ke x2 / y2.
Dengan 4 poin yang menggambarkan 2 segmen garis, bagaimana Anda menghitung jika garis A mengarah atau jauh dari garis B?
2 garis memiliki panjang tetap, dan dapat diukur sebagai jarak dari x1 / y1 ke x2 / y2.
Jawaban:
Biarkan A
dan B
jadilah dua poin di garis hitam. Biarkan C
dan D
jadilah segmen biru Anda. Tanda z
koordinat produk silang AB^AC
memberi tahu Anda apakah C
"kiri" atau "kanan" dari garis hitam. Demikian pula, produk silang AB^CD
memberi tahu Anda apakah CD
mengarahkan "kiri" atau "kanan" garis hitam.
Kami benar-benar tidak ingin tahu apakah itu kiri atau kanan; semua yang kita inginkan adalah memastikan mereka memiliki arah yang sama atau arah yang berlawanan, itu sebabnya kita mengalikan dua nilai.
Karena itu pseudocode berikut harus berfungsi:
z1 = (xB-xA)*(yC-yA) - (yB-yA)*(xC-xA);
z2 = (xB-xA)*(yD-yC) - (yB-yA)*(xD-xC);
z3 = z1 * z2;
if (z3 < 0)
; /* Pointing towards (BUT maybe even crossing) */
else if (z3 > 0 || z2 != 0)
; /* Pointing away */
else
; /* Parallel */
Saya khawatir saya perlu waktu untuk menulis solusi yang tepat untuk kurva Bezier. Apakah situasi berikut menuju atau pergi?
Dengan asumsi titik awal adalah lingkaran hijau, dan titik akhir adalah panah merah
Hitung jarak antara titik awal sebagai DS dan segmen hitam, dan lakukan hal yang sama untuk titik akhir (panah merah) sebagai DE. Jika DS> DE, maka segmen menunjuk ke arah. jika DE> DS, itu menunjuk pergi. Jika keduanya sama, keduanya paralel.
Anda dapat menemukan cara menghitung jarak dari titik ke segmen di sini , dan ke kurva bezier kuadratik di sini . Namun, tergantung pada bentuk kurva bezier, itu mungkin mengembalikan hasil yang aneh (kurva dapat melintasi sendiri)