Diberi intinya
Vector pos = new Vector(0.0, 0.20156815648078918, -78.30000305175781, 1.0);
dan bidang (segitiga)
Vector a = new Vector(-6.599999904632568, 0.0, -78.5, 1.0);
Vector b = new Vector(6.599999904632568, 0.0, -78.5, 1.0);
Vector c = new Vector(6.599999904632568, 4.400000095367432, -78.5, 1.0);
Saya ingin mendapatkan pesawat yang normal menunjuk ke arah pos
//Getting plane normal
Vector ac = Vector.Subtract(a,c);
Vector bc = Vector.Subtract(b,c);
Vector planeNormal = Vector.CrossProduct(bc, ac);
//Testing which side of the plane the point is on
double dprod = Vector.DotProduct(planeNormal, pos);
if (dprod < 0)
{
planeNormal.Negate();
}
Tetapi metode ini salah. planeNormal
Poin yang dihasilkan dalam arah Z negatif, sehingga tidak boleh dinegasikan. Apakah ada praktik terbaik untuk ini? Tolong bantu saya, saya gagal besar-besaran @ matematika :)
collision-detection
normals
Daniel Szalay
sumber
sumber
Jawaban:
Metode Anda sebagian besar benar tetapi ketinggalan satu langkah. Anda tidak bisa hanya menggunakan posisi titik sebagai vektor untuk mendapatkan produk titik, Anda harus membuat vektor arah dari titik di pesawat. Titik mana pun di pesawat akan melakukan (arah tidak harus tepat) jadi gunakan saja salah satu sudut.
sumber