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 :)


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.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.