Fix floating point error with Poisson-disk points being sampled outside shape (#1596)

* Check opposite corner

* Commets and test

* Fix compiling

---------

Co-authored-by: Keavon Chambers <keavon@keavon.com>
This commit is contained in:
0HyperCube
2024-02-04 17:16:16 +00:00
committed by GitHub
co-authored by Keavon Chambers
parent 5f72a6a8a1
commit aed30d78b8
4 changed files with 16 additions and 9 deletions
+6 -6
View File
@@ -160,12 +160,12 @@ impl<ManipulatorGroupId: crate::Identifier> Subpath<ManipulatorGroupId> {
for bezier in self.iter() {
// Check that the two bounding boxes don't intersect, since we can avoid doing intersection's cubic root finding in that case
let [bezier_corner1, bezier_corner2] = bezier.bounding_box_of_anchors_and_handles();
if !(((corner1.x <= bezier_corner1.x) && (bezier_corner1.x <= corner2.x) || (corner1.x <= bezier_corner2.x) && (bezier_corner2.x <= corner2.x))
&& corner1.y <= bezier_corner2.y
&& corner2.y >= bezier_corner1.y
|| ((corner1.y <= bezier_corner1.y) && (bezier_corner1.y <= corner2.y) || (corner1.y <= bezier_corner2.y) && (bezier_corner2.y <= corner2.y))
&& corner1.x <= bezier_corner2.x
&& corner2.x >= bezier_corner1.x)
if !(((corner1.x < bezier_corner1.x) && (bezier_corner1.x < corner2.x) || (corner1.x < bezier_corner2.x) && (bezier_corner2.x < corner2.x))
&& corner1.y < bezier_corner2.y
&& corner2.y > bezier_corner1.y
|| ((corner1.y < bezier_corner1.y) && (bezier_corner1.y < corner2.y) || (corner1.y < bezier_corner2.y) && (bezier_corner2.y < corner2.y))
&& corner1.x < bezier_corner2.x
&& corner2.x > bezier_corner1.x)
{
continue;
}