나는 (0, 0, w, h)에 점 (x, y)과 바운딩 박스를두고 있으며 방향 벡터 (dx, dy) 무작위 방향, 내가 뭘 하려는지 경계 상자의 가장자리에 그 방향에서 그 지점에서 선을 만드는 것입니다.화면 가장자리에서 선까지 연장하기
아래 이미지를 보면 검정색 점이 점이고, 화살표가 방향성 벡터이고 빨간색 선이 내가 원하는 선이됩니다.
지금 내가하고있는 일은 단순히 벡터로 선을 연장하고 상자 밖으로 배치 한 다음 클립으로 클리핑 알고리즘을 사용하여 임의의 큰 숫자로 확장하는 것입니다. 그리고 이것은 완전히 작동하지만, 매우 해킹 된 솔루션처럼 느껴질 수 있습니다. 더 좋은 방법이 있습니까?
수족관이 축 정렬되어 있으면 dx, dy (어떤면이 교차 될 수 있는지 확인), (s1.x - x)/dx 및 (s2. y - y)/dy. – Borgleader
1 년 전에 javascript 프로젝트에서 똑같이 필요했습니다. 관심이 있으시면 [코드 예] (http://i11www.iti.uni-karlsruhe.de/~algogeo14/team4/polygon.js)에서 'intersectScreenEdge' 함수를 볼 수 있습니다 (아래로 스크롤하여 코멘트 블록은 "수학"이라고 말함). 이 함수는 주어진 거리 (매개 변수 'o')로 상자 외부에 점을 배치 할 수 있으므로 예를 들어 둥근 뚜껑으로 그리는 경우 안전합니다. 필요없는 경우'o = 0'을 설정하거나 코드에서'o'를 무시하십시오. – leemes
"임의의 큰 숫자"가 항상 가장자리에 부딪 칠 정도로 크고 (부동 소수점 정밀 문제 또는 다른 예기치 않은 문제를 도입하기에는 너무 커서는 안됨) 보장 할 수있는 한 솔루션을 찾지 못할 수도 있습니다. 길이를 'w + h'로 설정하면 안전합니다 ([삼각형 부등식] (http://en.wikipedia.org/wiki/Triangle_inequality), 대각선 길이에 가깝지만 제곱근이 필요합니다 이는 불필요하게 느리다). (이것을 정규화 된 * dx, dy 벡터로 곱한다고 가정하십시오.) – leemes