Bir noktanın iki paralel çizgi arasında olup olmadığını nasıl test edebilirim?


10

Tasarladığım oyunda, başlangıç ​​noktasından farenin yönüne doğru çıkan bir patlama var. Bu patlamanın genişliği her zaman aynı olacaktır.

Ekranın alt kısmında (şu anda olan) kareler hareket eder, bu da oyuncunun kontrol ettiği patlamadan etkilenmelidir.

Şu anda bu karelerin köşelerinin patlamanın iki sınır çizgisi içinde olup olmadığını keşfetmek için bir yol bulmaya çalışıyorum. Bunu yapmanın en iyi yolunun, karenin köşelerini bir başlangıç ​​noktasının etrafında patlamanın tamamen yataymış gibi döndürmek ve köşelerin Y değerlerinin patlamanın genişliğinden daha az veya buna eşit olup olmadığını görmek olduğunu düşündüm. yani etkilenen bölgede yatıyorlar, ama çalışamıyorum


Bu bana yardımcı oldu: stackoverflow.com/a/3461533/1599699
Andrew

Yanıtlar:


11

Bir çizginin bir tarafı ve diğer çizginin diğer tarafı ise nokta 2 paralel çizgi arasındadır (çizgiler aynı yöne işaret eder).

Bir noktanın üzerinde bulunan bir satırın (üzerinde 2 nokta ile tanımlanır) hangi tarafının bulunduğunu bulmak için stackoverflow'daki bu sorunun üst yanıtını kullanabilirsiniz .


Alternatif bir yöntem, noktadan orta hatta olan mesafeyi hesaplamak ve patlamanızın kalınlığının yarısı ile karşılaştırmak olacaktır.


2

Bu şekilde yapıyorum (sağlanan düzlemlerin gerçekten paralel olup olmadığını ek bir kontrol ile. Plane nesneleri bu formda uçak denklemini içerir: Ax + By + Cz + D = 0, verilen 3'ten kolayca oluşturabilirsiniz veya bir noktadan ve normalden (matematik hakkında emin değilseniz bu sayfaya bakın: 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;
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.