Tôi có một trường hợp mà là dựa trên dự một điểm trên một đường thẳng và sau đó tách dòng này vào nó. trường hợp sử dụng của tôi là hơi phức tạp hơn, nhưng vấn đề của tôi có thể được sao chép với đoạn mã sau:Làm thế nào để đối phó với các lỗi làm tròn trong kiểu dáng cân đối
from shapely import *
line1 = LineString([(1,1.2), (2,2), (3, 2.), (4,1.2)])
pt = Point(2.5, 1.2)
pr = line1.interpolate(line1.project(pt))
Bằng cách xây dựng, "pr" nên được trên line1 và ngã tư của họ quá:
line1.contains(pr)
line1.intersects(LineString([pt, pr]))
in hai lần "Đúng". Nhưng việc thay đổi tọa độ đầu vào hơi phanh công việc:
from shapely import *
line1 = LineString([(1,1.2), (2,2), (3, 2.3), (4,1.2)])
pt = Point(2.5, 1.2)
pr = line1.interpolate(line1.project(pt))
line1.contains(pr)
line1.intersects(LineString([pt, pr]))
in "False".
Tôi hiểu vấn đề chính xác nổi đằng sau điều này, nhưng điều đó có nghĩa là tôi có thể không bao giờ thử nghiệm cho các điểm đang trên đường kẻ? Khi tôi xây dựng một đường dựa trên một danh sách các điểm, tôi có thể chắc chắn rằng ít nhất tất cả các "xây dựng" điểm sẽ được trên dòng?
Bạn có thể lựa chọn một đơn vị cụ thể hơn, cho phép nói, mm thay vì mét? –
@PauloScardine: nhờ. Có, tôi có thể dễ dàng cho đi chính xác nếu tôi đạt được sự ổn định. Multipliying giá trị của tôi bằng 10 làm cho các trick. Nhưng nó sẽ làm việc trong ** tất cả ** trường hợp? Shapely tiếp tục làm việc với phao nổi trong nội bộ. – Fabzi