이
ab = A + (B - A) * s
그래서, AB의 방향이 B - A
, 또는 (B.x - A.x, B.y - A.y)
그대로 AB 그냥 표현 될 수 있다는 것을 관찰 도움이 될 것이다. 방향이 (A.y - B.y, B.x - A.x)
인 선은 수직입니다. (우리는 단지와 y는 x를 교환하고 그 중 하나를 부정.)
우리는 특히 AB에 수직이며, 또한 P 통과하는 선을 원하는, 그래서 우리는 할
perp = P + (A.y - B.y, B.x - A.x) * t;
perp = (P.x + A.y - B.y, P.y + B.x - A.x) * t;
지금 바로 교차로를 찾을 수 이 수직선과 AB 사이. 두 개의 방정식 (교차점의 x와 y 성분)과 두 개의 미지수 (s와 t)가 있습니다. 일단 s와 t를 찾으면 그것들을 라인의 방정식 중 하나에 연결하여 교차점을 얻습니다. 이전
static Vect2 getIntersection(Vect2 A, Vect2 B, Vect2 P) {
Vect2 abDir = B.minus(A);
Vect2 perpDir = new Vect2(-abDir.y, abDir.x);
Vect2 apDir = P.minus(A);
double s = (perpDir.y * apDir.x - perpDir.x * apDir.y)
/(abDir.x * perpDir.y - abDir.y * perpDir.x);
return A.plus(abDir.scale(s));
}
class Vect2 {
final double x, y;
Vect2(double x, double y) {
this.x = x;
this.y = y;
}
Vect2 scale(double k) {
return new Vect2(x * k, y * k);
}
Vect2 plus(Vect2 that) {
return new Vect2(x + that.x, y + that.y);
}
Vect2 minus(Vect2 that) {
return this.plus(that.scale(-1));
}
}
이이 요청 된 * 수십 * 시간 : 여기
몇 가지 작업 코드입니다. –