나는 이것에 대한 완전한 방정식을 아직 다루지 않았지만, 여기에 문제를 둘러싼 머리를 감싸는 데 도움이되는 시각 자료가 있습니다. 그것은 어떤 기하학으로 요약됩니다 :
( Kenney를 통한 자동차 아이콘 )
주어진 시작점과 방향에서 최소 회전 반경 (왼쪽, 오른쪽)으로 두 개의 원을 그릴 수 있습니다. 이것들은 우리의 길을 향한 가장 촉박 한 시작점을 설명합니다.
원하는 끝 위치와 방향에 대해 동일한 작업을 수행 할 수 있습니다. 이 원들은 우리의 길로가는 가장 끝을 묘사합니다.
이제 문제는 시작 원 중 하나를 끝 원 중 하나에 결합하여 각 접선을 따라 키스하는 경로를 찾는 것입니다.
(이것은 질문에서 언급되지 않은 사이에 장애물을 찾을 필요가 없다고 가정합니다. Stormwind의 답변은 이러한 유형의 문제에 대한 탐색 그래프 정보를 사용하는 방법에 대해 알 수 있습니다. 통과하기 위해 아래의 방법을 계획의 각 세그먼트에 적용 할 수 있습니다.)
단순성을 위해 직선을 사용하면 다음과 같은 결과가 나타납니다.
이것은 우리에게 제한적인 경우를 제공합니다. 이 방법으로 경로를 찾으면 시작 또는 끝 원 중 하나 또는 둘 모두를 인위적으로 부풀려서 두 원이 키스하는 지점까지 덜 직접적이지만 부드러운 경로를 얻을 수 있습니다.
이러한 경로 계산
한 번의 회전 방향에 대한 사례를 해결합시다. 우회전하면 경로가 시작됩니다.
우회전의 중심은 다음과 같습니다.
startRightCenter = carStart.position + carStart.right * minRadius
경로의 직선 부분의 각도를 정의합시다 (양의 x 축에서 측정) pathAngle
우리가에서 벡터를 그리면 rightCenter
우리가 회전 원 (있는 우리가 pathAngle에 직면해야 포인트)를 떠나 지점, 벡터이다 그 ...
startOffset = minRadius * (-cos(pathAngle), sin(pathAngle))
그것은 우리가 원을 떠나는 지점이 ...
departure = startRightCenter + startOffset
우리가 회전 원을 다시 입력하는 지점은 우리가 왼쪽 또는 오른쪽 회전으로 끝낼 것인지에 달려 있습니다.
// To end with a right turn:
reentry = endRightCenter + startOffset
// To end with a left turn: (crossover)
reentry = endLeftCenter - startOffset
우리는 우리의 일 권리를 수행 한 경우 이제, 라인 합류 departure
에 reentry
수직되어야한다 startOffset
:
dot(reentry - departure, startOffset) = 0
그리고이 방정식을 해결하면 이것이 사실 인 각도를 얻을 수 있습니다. (기술적으로 그러한 각도가 두 개 있기 때문에 여기서는 복수형을 사용하지만 그중 하나는 일반적으로 우리가 원하는 것이 아닌 반전 운전을 포함합니다)
우회전을 우회전으로 바꾸는 예를 들어 보겠습니다.
dot(endRightCenter + startOffset - startRightCenter - startOffset, startOffset) = 0
dot(endRightCenter - startRightCenter, startOffset) = 0
pathAngle = atan2(endRightCenter - startRightCenter)
교차 사례는 더 복잡합니다. 아직까지 모든 수학을 수행하지 않은 사례입니다. 나머지 세부 사항을 해결하는 동안 도움이 될 경우를 대비하여 지금까지 답변을 게시하겠습니다.
편집 : 최소 회전 반경 내의 대상
이 방법은 목적지가 최소 회전 거리보다 가까운 경우에도 즉시 사용 가능합니다. 재진입 원 중 하나의 적어도 일부는 회전 반경 바깥에서 끝나기 때문에 약간의 프레첼 모양을 얻는 것이 마음에 들지 않는 한 실행 가능한 경로를 찾을 수 있습니다.
우리가 길을 좋아하지 않는다면 우리는 그런 식으로 얻을 수 있습니다 (또는 불가능한 경우-모든 경우를 철저히 점검하지는 않았을 수도 있습니다-아마도 불가능한 경우가있을 수도 있습니다), 우리는 항상 적절하게 얻을 때까지 직진 또는 후진 할 수 있습니다 위 그림과 같이 시작 및 끝 원 사이의 키스 접촉.