Errorneous intersection in focus point calc fixed

Signed-off-by: Mark Tolmacs <mark@lazycat.hu>
feat/remove-ga
Mark Tolmacs 5 days ago
parent b49ccbf497
commit 4984d57673
No known key found for this signature in database

@ -70,6 +70,7 @@ import {
vectorNormalize,
vectorCross,
pointsEqual,
pointOnLineSegment,
} from "../../math";
import { intersectElementWithLineSegment } from "./collision";
import { distanceToBindableElement } from "./distance";
@ -1533,77 +1534,46 @@ const determineFocusDistance = (
pointRotateRads(a, center, -element.angle as Radians),
pointRotateRads(b, center, -element.angle as Radians),
);
// [
// linesIntersectAt(
// rotatedInterceptor,
// line(
// element.type === "diamond"
// ? pointFrom<GlobalPoint>(element.x + element.width / 2, element.y)
// : pointFrom<GlobalPoint>(element.x, element.y),
// element.type === "diamond"
// ? pointFrom<GlobalPoint>(
// element.x + element.width / 2,
// element.y + element.height,
// )
// : pointFrom<GlobalPoint>(
// element.x + element.width,
// element.y + element.height,
// ),
// ),
// ),
// linesIntersectAt(
// rotatedInterceptor,
// line(
// element.type === "diamond"
// ? pointFrom<GlobalPoint>(element.x, element.y + element.height / 2)
// : pointFrom<GlobalPoint>(element.x + element.width, element.y),
// element.type === "diamond"
// ? pointFrom<GlobalPoint>(
// element.x + element.width,
// element.y + element.height / 2,
// )
// : pointFrom<GlobalPoint>(element.x, element.y + element.height),
// ),
// ),
// ]
// .filter((p: GlobalPoint | null): p is GlobalPoint => p !== null)
// .sort((g, h) => pointDistanceSq(g, b) - pointDistanceSq(h, b))
// .forEach((p) => debugDrawPoint(p, { color: "red", permanent: true }));
const axes = [
line(
element.type === "diamond"
? pointFrom<GlobalPoint>(element.x + element.width / 2, element.y)
: pointFrom<GlobalPoint>(element.x, element.y),
element.type === "diamond"
? pointFrom<GlobalPoint>(
element.x + element.width / 2,
element.y + element.height,
)
: pointFrom<GlobalPoint>(
element.x + element.width,
element.y + element.height,
const axes =
element.type === "diamond"
? [
line(
pointFrom<GlobalPoint>(element.x + element.width / 2, element.y),
pointFrom<GlobalPoint>(
element.x + element.width / 2,
element.y + element.height,
),
),
),
line(
element.type === "diamond"
? pointFrom<GlobalPoint>(element.x, element.y + element.height / 2)
: pointFrom<GlobalPoint>(element.x + element.width, element.y),
element.type === "diamond"
? pointFrom<GlobalPoint>(
element.x + element.width,
element.y + element.height / 2,
)
: pointFrom<GlobalPoint>(element.x, element.y + element.height),
),
];
line(
pointFrom<GlobalPoint>(element.x, element.y + element.height / 2),
pointFrom<GlobalPoint>(
element.x + element.width,
element.y + element.height / 2,
),
),
]
: [
line(
pointFrom<GlobalPoint>(element.x, element.y),
pointFrom<GlobalPoint>(
element.x + element.width,
element.y + element.height,
),
),
line(
pointFrom<GlobalPoint>(element.x + element.width, element.y),
pointFrom<GlobalPoint>(element.x, element.y + element.height),
),
];
const ordered = [
linesIntersectAt(rotatedInterceptor, axes[0]),
linesIntersectAt(rotatedInterceptor, axes[1]),
]
.filter((p): p is GlobalPoint => p !== null)
.filter((p) => !pointOnLineSegment(p, lineSegment(a, b)))
.map((p, idx): [GlobalPoint, number] => [p, idx])
.sort((g, h) => pointDistanceSq(g[0], b) - pointDistanceSq(h[0], b))[0];
const sign =
Math.sign(vectorCross(vectorFromPoint(b, a), vectorFromPoint(b, center))) *
-1;
@ -1720,7 +1690,7 @@ const determineFocusPoint = (
) < 0),
];
return selected[0]
const focusPoint = selected[0]
? focus > 0
? candidates[1]
: candidates[0]
@ -1735,6 +1705,8 @@ const determineFocusPoint = (
: focus > 0
? candidates[0]
: candidates[3];
return focusPoint;
};
export const bindingProperties: Set<BindableProp | BindingProp> = new Set([

Loading…
Cancel
Save