normalize before projection to improve rotated crop region drag

pull/8613/head
Ryan Di 5 months ago
parent 1a0755cd56
commit 58307a96dc

@ -456,7 +456,7 @@ import {
vectorFromPoint,
vectorSubtract,
vectorDot,
vectorMagnitude,
vectorNormalize,
} from "../../math";
import { cropElement } from "../element/cropElement";
@ -7969,34 +7969,20 @@ class App extends React.Component<AppProps, AppState> {
croppingElement.angle,
),
);
const topEdge = vectorSubtract(topRight, topLeft);
const leftEdge = vectorSubtract(bottomLeft, topLeft);
const topEdge = vectorNormalize(
vectorSubtract(topRight, topLeft),
);
const leftEdge = vectorNormalize(
vectorSubtract(bottomLeft, topLeft),
);
/**
* project instantDrafOffset onto leftEdge to find out the y scalar
* topEdge to find out the x scalar
* project instantDrafOffset onto leftEdge and topEdge to decompose
*/
const scaleY =
vectorDot(instantDragOffset, leftEdge) /
vectorDot(leftEdge, leftEdge);
const scaleX =
vectorDot(instantDragOffset, topEdge) /
vectorDot(topEdge, topEdge);
instantDragOffset = vectorScale(
vector(scaleX, scaleY),
/**
* projection results in small x and y scalars
* scale to account for this
*/
Math.min(
Math.max(
vectorMagnitude(topEdge),
vectorMagnitude(leftEdge),
),
100,
),
instantDragOffset = vector(
vectorDot(instantDragOffset, topEdge),
vectorDot(instantDragOffset, leftEdge),
);
}

Loading…
Cancel
Save