Tôi muốn biết một đoạn mã thực sự có thể cho tôi biết nếu 3 điểm trong không gian 2D nằm trên cùng một dòng hay không. Một mã giả cũng đủ nhưng Python thì tốt hơn.Kiểm tra xem 3 điểm trên cùng một dòng
Trả lời
Bạn có thể kiểm tra xem diện tích của tam giác ABC là 0:
[ Ax * (By - Cy) + Bx * (Cy - Ay) + Cx * (Ay - By) ]/2
Tất nhiên, bạn không thực sự cần phải chia cho 2.
Điều này tốt hơn nhiều vì không có nguy cơ chia cho 0. –
Chỉ cần chỉ ra điều gì đó ... Đây là câu trả lời toán học tương đương với @ dcp ở trên (nếu bạn bỏ qua '/ 2'), nhưng kiểm tra xem khu vực có 0 làm cho nó dễ dàng hơn để thêm một sự khoan dung ... (tức là 'stuff
+1 toán học là giống nhau nhưng khái niệm đơn giản hơn/trực quan/straighforward (tôi thích nó). – joaquin
y - y0 = a(x-x0)
(1) trong khi a = (y1 - y0)/(x1 - x0)
và A(x0, y0)
B(x1, y1)
C(x2, y2)
. Xem liệu C
statisfies (1). Bạn chỉ cần thay thế các giá trị thích hợp.
Đây là C++, nhưng bạn có thể thích ứng với nó để trăn:
bool collinear(int x1, int y1, int x2, int y2, int x3, int y3) {
return (y1 - y2) * (x1 - x3) == (y1 - y3) * (x1 - x2);
}
Về cơ bản, chúng tôi đang kiểm tra rằng các sườn núi giữa điểm 1 và điểm 2 và điểm 1 và điểm 3 trận đấu. Độ dốc thay đổi theo y chia cho thay đổi trong x, vì vậy chúng tôi có:
y1 - y2 y1 - y3
------- = --------
x1 - x2 x1 - x3
Nhân chéo cung cấp (y1 - y2) * (x1 - x3) == (y1 - y3) * (x1 - x2)
;
Lưu ý, nếu bạn đang sử dụng đôi, bạn có thể kiểm tra đối với một epsilon:
bool collinear(double x1, double y1, double x2, double y2, double x3, double y3) {
return fabs((y1 - y2) * (x1 - x3) - (y1 - y3) * (x1 - x2)) <= 1e-9;
}
Nó làm gì? – dtb
@dtb - Tôi đã thêm giải thích, cho tôi biết nếu bạn vẫn còn câu hỏi. – dcp
mẹo hay. Tuy nhiên, việc kiểm tra các số dấu chấm động cho sự bình đẳng không an toàn. Bạn có thể kiểm tra sự khác biệt tuyệt đối so với ngưỡng được xác định trước phụ thuộc vào độ phân giải (độ nhạy) mà bạn muốn đạt được –
đọc this, và sử dụng nó để tìm ra phương trình của một đường qua hai điểm đầu tiên. Làm theo hướng dẫn để tìm số m
và b
. Sau đó, cho điểm thứ ba của bạn, tính toán mx + b - y
. Nếu kết quả bằng không, điểm thứ ba là trên cùng một dòng như hai đầu tiên.
Quy tắc 1: Trong bất kỳ 2d tuyến tính không gian, hai điểm luôn trên cùng một dòng.
Lấy 2 điểm và xây dựng một phương trình đại diện cho một đường thẳng qua chúng. Sau đó kiểm tra xem điểm thứ ba cũng nằm trên dòng đó hay không.
Chúc may mắn.
- 1. Trong Python, làm thế nào để kiểm tra xem một dòng là cuối cùng?
- 2. Làm cách nào để kiểm tra xem hai đường dẫn có nằm trên cùng một điểm gắn kết không?
- 3. Kiểm tra xem char có phải là một dòng mới
- 4. python: cách kiểm tra xem một dòng có phải là một dòng trống không
- 5. Cách kiểm tra xem một dòng có một trong các chuỗi trong danh sách không?
- 6. Kiểm tra xem có đầu vào nào có tiêu điểm
- 7. Mongodb: Kiểm tra xem một điểm có nằm trong một đa giác được lưu trữ không
- 8. Tiếp tục xuất trên cùng một dòng
- 9. Tìm một điểm trên một dòng
- 10. Kiểm tra xem cửa sổ có bị mất tiêu điểm
- 11. Kiểm tra xem một điểm có nằm trong một hình chữ nhật xoay (C#)
- 12. python 3: cách kiểm tra xem đối tượng có phải là một hàm không?
- 13. Java: Kiểm tra xem đối số dòng lệnh là null
- 14. Cách kiểm tra xem thanh cuộn có ở dưới cùng
- 15. Kiểm tra xem điểm được chiếu trên đoạn đường không nằm ngoài nó
- 16. Bạn có thể kiểm tra xem nhiều giá trị có giống nhau trên cùng một dòng trong ruby trên đường ray không?
- 17. Chạy nhiều kiểm tra Selenium cùng một lúc
- 18. Hình học 2D: cách kiểm tra xem một điểm có nằm trong một góc
- 19. Làm thế nào để kiểm tra xem một điểm có nằm trong một ellipsoid không?
- 20. Kiểm tra vòng lặp nếu trên lần lặp cuối cùng?
- 21. Kiểm tra PHP MySQL Dòng cuối
- 22. Kiểm tra xem một khóa có phải là phần tử cuối cùng trong một mảng không?
- 23. Actionscript 3: kiểm tra xem chuỗi có chứa một chuỗi khác
- 24. Ruby in nhiều trên cùng một dòng
- 25. Python 3. Cần ghi vào một tệp, kiểm tra xem có tồn tại một dòng hay không, sau đó ghi vào tệp một lần nữa
- 26. Kiểm tra xem đường dẫn có đang trên mạng
- 27. Kiểm tra xem một tập tin là một hình ảnh
- 28. Kiểm tra xem Django
- 29. in ra màn hình trên cùng một dòng vào những thời điểm khác nhau
- 30. Kiểm tra xem tất cả các mục có cùng một lớp hay không
Dòng của bạn được xác định như thế nào? Chức năng trên mặt phẳng 2d? – Daenyth
Chính xác những gì bạn được cung cấp? Ba điểm? hoặc ba điểm và một dòng? –