쉬운 방법이없는 것은 확실하지 않지만 2 차원 삼각 솔루션이 더 적합하더라도 3 차원 벡터 수학으로 자주 되돌아가는 경향이 있습니다. 귀하의 질문에 2d에서 일하고 있음을 의미하지만 3d 수학은 여전히 효과가 있습니다. 바라건대, 누군가 당신을위한 더 쉬운 알고리즘을 생각해 낼 것입니다. 그러나 그렇지 않다면 여기에 뭔가가 있습니다.
각도 측정에서 가장 짧은 길이라고 가정합니다. 이 코드에서 최단 경로가 CCW이면 결과는 양수 값이되고 CW이면 음의 각도 값이됩니다.
Vector2 targetPosition = new Vector2(3, 3);
Vector2 myPosition = new Vector2(4, 7);
Vector2 myFacingDirection2D = new Vector2(-1, 0);//facing straight left
Vector3 directionToTarget3D = Vector3.Normalize(new Vector3(targetPosition - myPosition, 0));
Vector3 myFacingDirection3D = Vector3.Normalize(new Vector3(myFacingDir2D, 0);
Vector3 crossResult = Vector3.Cross(myFacingDirection3D, directionToTarget3d);
float dotFactor = Vector3.Dot(myFacingDirection3D, directionToTarget3D) < 0 ? MathHelper.Pi : 0f;
float angleToTarget = (dotFactor - (float)Math.Sin(crossResult.Length())) * Math.Sign(crossResult.Z);
역순으로 표시되는 경우 (양수/음수) 교차 기능에서 매개 변수의 순서를 반대로하십시오.