Cho một mặt phẳng và một điểm, làm thế nào tôi có thể xác định được mặt nào của mặt phẳng đó?


8

Đưa ra quan điểm

Vector pos = new Vector(0.0, 0.20156815648078918, -78.30000305175781, 1.0);

và mặt phẳng (tam giác)

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

Tôi muốn có một mặt phẳng chỉ bình thường theo hướng 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();
}

Nhưng phương pháp này là sai. Các planeNormalđiểm kết quả theo hướng Z âm, vì vậy không nên phủ định. Có một thực hành tốt nhất cho điều này? Xin hãy giúp tôi, tôi thất bại ồ ạt @ math :)


Tôi sẽ bình thường hóa bình thường, nếu bạn đang sử dụng một phương pháp tương tự để tính toán ánh sáng.
Ray Dey

Câu trả lời:


9

Phương pháp của bạn chủ yếu là đúng nhưng bỏ lỡ một bước. Bạn không thể đơn giản sử dụng vị trí của điểm làm vectơ để có một sản phẩm chấm với, bạn cần tạo một vectơ chỉ hướng từ một điểm trên mặt phẳng. Bất kỳ điểm nào trên mặt phẳng cũng sẽ làm (hướng không cần chính xác) vì vậy chỉ cần sử dụng một trong các góc.


Mát mẻ. Tại sao không quan trọng điểm nào trên máy bay được chọn?
Cameron

Bởi vì bạn chỉ tìm kiếm tích cực hoặc tiêu cực từ sản phẩm chấm ở cuối. Bất kể giá trị chính xác được tính toán, sản phẩm dấu chấm là dương đối với các vectơ chỉ ở một bên và âm đối với các vectơ chỉ ở phía bên kia.
jhocking
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.