Reputation: 4620
Im trying to check if a vectors new position is crossing a given line.
I know the coordinates of the original vector, and its new position. The line i want to check if it crosses is always perpendicular to the vectors original positions direction. And the line is always the same distance from zero.
I'm using threejs so have access to all their math/vector functions. This is just in 2D however.
Here are two images to illustrate. I want to check if the black dot crosses the red line.
EDIT
If anyone ever needs to see the code for this, thanks to @beta's answer below. It was actually to stop a point from getting too close to the center of another object
canPointMoveTo(originalPos, newPos) {
const minDistance = 40;
const k = originalPos.clone().normalize();
const newDotProduct = newPos.dot(k);
return newDotProduct >= minDistance;
}
Upvotes: 1
Views: 732
Reputation: 99144
Call the distance from the origin to the line, D.
Call the vectors v0 and v1.
Take the old vector v0, normalize it, and call that vector k:
k = v0/|v0|
Now to find out which side of the line a vector is on, take its dot product with k and compare that value to D.
The vector "crosses the line" if and only if the old vector and the new vector are on different sides of the line:
{v0 . k > D and v1 . k < D} or {v0 . k < D and v1 . k > D}.
Upvotes: 1