이 하나의 주위에 쉬운 방법은 기울기 m의 관점에서 생각하는 것이 아니라 x와 y에 오히려 변화하는 dx, dy (미적분 표기법)라고 부릅니다. 이유는 한 가지입니다. 수직선의 기울기를 처리하는 것이 무한하며, 어떤 경우 trig 함수를 사용할 필요가 없기 때문에이 코드는 더 빠르고 간단합니다.
dx = x2 - x1;
dy = y2 - y1;
여기서 포인트 2는 원하는 라인의 교차점이라고 가정합니다.
좋습니다. 따라서 수직선은 첫 번째의 음의 역수를 갖는 기울기를가집니다. 그 두 가지 방법이 있습니다
dx2 = -dy
dy2 = dx
또는
dx2 = dy
dy2 = -dx
이 두 방향에 대응 한 우회전, 다른 왼쪽.
그러나 dx와 dy는 원래 선분의 길이에 맞게 조정됩니다. 직각이 다른 길이입니다. 다른 측면에 대해 다시
double scale = length(whatever length you want to go)/sqrt(dx*dx+dy*dy);
double dx2 = -dy * scale;
double dy2 = dx * scale
다음 동일한 :이며, 한쪽 또는 다른 이동
double length(double x1, double y1, double x2, double y2) {
return sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1));
}
, 당신이 원하는 것을 수행 여기
은 두 점 사이의 길이입니다 . 방금 sqrt를 사용했기 때문에 예제가 다소 C++이라는 것을 알았지 만, 그 차이점은 사소한 것입니다. 제곱근을 결합하여 코드를 더 효율적으로 작성할 수 있습니다.
출처
2009-12-17 16:14:40
Dov
수직선을 만나기를 원하는 알려진 선의 지점에 따라 달라집니다. 예제 다이어그램은 알려진 선의 중간 지점에있는 것처럼 보입니다. – ZombieSheep
예, 빨간색 선의 중간 점에서 교차해야합니다. – basszero
관련 항목 : [대각선에서 직각 오프셋 계산] (http://stackoverflow.com/q/17195055/183120). – legends2k