Tôi có 2 dòng. Cả hai dòng có chứa 2 điểm X và Y. Điều này có nghĩa là cả hai đều có chiều dài.Thuật toán cho giao điểm của 2 dòng?
Tôi thấy 2 công thức, một công thức sử dụng các yếu tố quyết định và một sử dụng đại số bình thường. Cách nào hiệu quả nhất để tính toán và công thức trông như thế nào?
Tôi đang gặp khó khăn khi sử dụng ma trận trong mã.
Đây là những gì tôi có cho đến nay, nó có thể hiệu quả hơn không?
public static Vector3 Intersect(Vector3 line1V1, Vector3 line1V2, Vector3 line2V1, Vector3 line2V2)
{
//Line1
float A1 = line1V2.Y - line1V1.Y;
float B1 = line1V2.X - line1V1.X;
float C1 = A1*line1V1.X + B1*line1V1.Y;
//Line2
float A2 = line2V2.Y - line2V1.Y;
float B2 = line2V2.X - line2V1.X;
float C2 = A2 * line2V1.X + B2 * line2V1.Y;
float det = A1*B2 - A2*B1;
if (det == 0)
{
return null;//parallel lines
}
else
{
float x = (B2*C1 - B1*C2)/det;
float y = (A1 * C2 - A2 * C1)/det;
return new Vector3(x,y,0);
}
}
Làm thế nào về bạn viết công thức, chỉ cần toán, không có mã, và sau đó bạn cho chúng tôi thấy mã bạn có, và sau đó bạn cho chúng tôi biết nơi bạn đang gặp sự cố? – atk
Bạn thực hiện thuật toán O (1), vì vậy tôi không chắc chắn bạn đang thực sự tìm kiếm hiệu quả. Nếu bạn thực sự là, có bạn profiled mã của bạn để tìm ra những gì bit kém hiệu quả hơn những người khác? bạn đã kiểm tra các phần khác của chương trình của bạn để xem những gì không hiệu quả và làm thế nào để bạn xác định hiệu quả, ông (kích thước trong bộ nhớ, tốc độ, vv)? Hoặc, kể từ khi bạn nói về ma trận, bạn có thực sự yêu cầu một giải pháp chung chung, với một dòng trong số thứ nguyên tùy ý không? – atk
Bạn nói "dòng" nhưng bạn nói họ có chiều dài. Bạn có nghĩa là các dòng hoặc đoạn đường? Trường hợp đường thẳng dễ dàng hơn nhiều vì bất kỳ hai dòng không song song nào trong mặt phẳng x, y sẽ giao cắt _somewhere_, không phải như vậy với các phân đoạn – user316117