Diberi sebuah pesawat dan sebuah titik, bagaimana saya bisa menentukan di sisi mana pesawat itu berada?

8

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. planeNormalPoin yang dihasilkan dalam arah Z negatif, sehingga tidak boleh dinegasikan. Apakah ada praktik terbaik untuk ini? Tolong bantu saya, saya gagal besar-besaran @ matematika :)

Daniel Szalay
sumber
Saya akan menormalkan yang normal, jika Anda menggunakan metode serupa untuk perhitungan pencahayaan.
Ray Dey

Jawaban:

9

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.

jhocking
sumber
Keren. Mengapa tidak penting titik mana di pesawat yang dipilih?
Cameron
Karena Anda hanya mencari positif atau negatif dari produk titik pada akhirnya. Terlepas dari nilai pasti yang dihitung, produk titik positif untuk vektor yang menunjuk di satu sisi dan negatif untuk vektor yang menunjuk di sisi lain.
jhocking