Bagaimana saya bisa menguji jika suatu titik terletak di antara dua garis paralel?

9

Dalam game yang saya desain ada ledakan yang keluar dari titik asal ke arah mouse. Lebar ledakan ini akan selalu sama.

Di sepanjang bagian bawah layar (saat ini) kotak bergerak tentang yang harus dilakukan oleh ledakan yang dikendalikan pemain.

Saat ini saya mencoba mencari cara untuk mengetahui apakah sudut-sudut kotak ini berada dalam dua garis pembatas ledakan. Saya pikir cara terbaik untuk melakukan ini adalah dengan memutar sudut-sudut alun-alun di sekitar titik asal seolah-olah ledakan itu sepenuhnya horisontal dan melihat apakah nilai-nilai Y dari sudut-sudut itu kurang dari atau sama dengan lebar ledakan yang akan berarti bahwa mereka berada di wilayah yang terkena dampak, tetapi saya tidak bisa berolahraga

Harold
sumber

Jawaban:

11

Titik berada di antara 2 garis sejajar jika itu satu sisi dari satu garis dan sisi lain dari garis lainnya (memberikan titik garis dalam arah yang sama).

Anda dapat menggunakan jawaban teratas dari pertanyaan ini di stackoverflow untuk mengetahui sisi mana dari sebuah garis (didefinisikan oleh 2 poin di atasnya) di mana sebuah titik terletak.


Metode alternatif adalah menghitung jarak dari titik ke garis tengah dan membandingkannya dengan setengah ketebalan ledakan Anda.

George Duckett
sumber
2

Ini adalah bagaimana saya melakukannya (dengan pemeriksaan tambahan apakah pesawat yang disediakan benar-benar paralel. Objek pesawat berisi persamaan bidang dalam bentuk ini: Ax + By + Cz + D = 0, yang dapat Anda hasilkan dengan mudah dari 3 yang diberikan poin, atau dari titik dan normal (lihat halaman ini jika Anda tidak yakin tentang matematika: http://paulbourke.net/geometry/pointlineplane/ )

bool isPointBetweenParallelPlanes(const vec3 point, const Plane a, const Plane b){
// test if planes are parallel
vec3 cross = a.normal CROSS b.normal;
assert((a.normal CROSS b.normal) == vec3(0,0,0) && "These planes should be parallel.");
return ((a.normal DOT point) + a.D) * ((b.normal DOT point) + b.D) < 0.0;
}
Jeroen Baert
sumber