2009-10-14 5 views
2

이 코드는 XNA 프레임 워크로 제작 된 게임에서 가져온 것입니다. trig와 physics의 관점에서 어떻게 작동하는지에 대한 설명을 원합니다.C# - 자외선 측정 코드 설명 (물리학)

ball.velocity = 새로운 Vector2 ((플로트)와 Math.cos (cannon.rotation) (플로트)에서는, Math.sin (cannon.rotation));

ball.rotation은 라디안이라고 생각해야하는 스프라이트의 회전입니다.

왜 빗변이 가리키는 방향의 y 위치를 찾으려면 x 위치를 찾기 위해서만 라디안으로 각도를 사용할 수 있습니다.

내가 왜 이런 질문을했는지. 이 프레임 워크가 trig에 대한 계산을 수행하는 방법에 대한 느낌을 얻고 싶습니다. 나는 마우스가있는 방향으로 회전하기 위해 스프라이트를 얻으려고합니다 : x와 y는 알려졌고, 나는 단지 각도가 필요합니다.

여기에는 두 가지 질문이 있습니다. 위의 코드를 설명하고 스프라이트를 알려진 점의 방향으로 향하게합니다.

는 업데이트 :

I는 XNA 좌표계를 사용하기 때문에, 역 점 개체에있는 A는 (0,0) 아니라는 것을 알았다. 이제 변수는 다음과 같습니다.

오브젝트의 포인트. 마우스 포인트.

답변

10

각 각은 단위 원의 한 점에 해당합니다. (단위 원은 반경 1 인 원점을 중심으로 한 고유 한 원이고; 단위 원은 x^2 + y^2 = 1을 만족하는 점 집합입니다. 대응은 다음과 같습니다 : 각이 theta 인 경우, theta(cos theta, sin theta)에 해당합니다. (cos theta, sin theta)가 단위 서클에있는 이유는 무엇입니까? 때문에 x = cos thetay = sin theta, 함께 모두가 좋아하는 정체성

cos^2 theta + sin^2 theta = 1. 

의 포인트 (x, y) 만족 x^2 + y^2 = 1(x, y)이 단위 원에 너무.

이를 역으로, 단위 원에 포인트를 지정해 사용하여 각도를 찾을 수 inverse tangent (아마도 arctan 또는 atan 때로는 tan -1 당신 알려진).정확히 말하면, 단위 원에 (x, y)이 주어 졌으므로, theta = arctan(y/x)을 계산하여 (x, y)에 해당하는 각도를 찾을 수 있습니다.

물론 여기에는 다소 지저분한 세부 정보가 있습니다. 함수 arctany/x(-y/-x)이 같은 부호를 가지므로 입력 (x, y)(-x, -y) 사이의 차이를 알 수 없습니다. 또한 arctanx = 0 인풋을 처리 할 수 ​​없습니다. 그래서 우리는 일반적으로 C#에서 우리

atan2(y, x) = arctan(y/x)  if x > 0 
      = pi + arctan(y/x) if y >= 0, x < 0 
      = -pi + arctan(y/x) if y < 0, x < 0 
      = pi/2    if y > 0, x = 0 
      = -pi/2    if y < 0, x = 0 
      = NaN     if y = 0, x = 0 

이러한 지저분한 세부 사항을 처리하는 기능 atan2을 정의하여 이러한 처리, Math.Atan 내가 위에서 언급 한 기능 arctan이며, Math.Atan2 내가 언급 한 기능 atan2입니다 위의.

2

원 위에서 점을 돌려주는 cos과 sin을 볼 수 있습니다.

그 점에서 동그라미의 중심으로 캐논의 중간을보십시오. 그러면 각도 (캐논의 각도)가 주어지면 원과 죄가 가리키는 원의 위치를 ​​얻을 수 있습니다. 캐논이 0,0 위치에 집중되어 있다고 생각하면이 값은 총알이 이동해야하는 방향이기도합니다.

답변 2 : x와 y를 알고 각도를 알아야하는 경우 ... 한 점이 0,0 인 삼각형의 경사면에서 형성된 각도를 반환하는 atan 함수가 필요합니다. 다른 점은 다음과 같습니다. x, y 점과 한 점은 90도 각도의 점

2

슬프게도,이 SO에 대답하는 가장 좋은 형식이 아닌 좋은 질문입니다.

대신 텍스트로 설명하는, 나는 그것에 대해 파라 메트릭 방정식을 배울 도움이 될 것입니다 생각합니다. Google에서 '원 매개 변수 방정식'을 검색하여 시작할 수 있습니다.

이 개념이 나를 위해 클릭 한 방식은 죄, 원, 원 및 각도 사이의 관계를 이해할 때까지 다른 코드 조각을 실험하는 것이 었습니다. 사진과 이미지를 보는 것도 많은 도움이됩니다. 그 전에는 설명을 읽었지만 결코 그 설명을 단호하게 파악할 수 없었습니다. 더 많은 정보 (& 예뻐 그래프)에 대한

if x!= 0 a = atan(y/x) 
otherwise a = sign(y)*Pi/2 

: 당신은 Y X를 가지고있는 경우

4
 | 
    y.-----* P 
    | /| 
    | /| 
    | r/ | 
    |/a | 
    |/)___.__ 
    O   x 

    we have: 

    a = angle in radians 
    O: origin 
    P: known point 
    r: distince between O & P 

    to calculate x, y: 

     x = r*cos(a) 
     y = r*sin(a) 

(in your example : r = 1, a = cannon.rotation) 

이제, 당신이 원하는 Wikipedia: Polar coordinate system

0

당신은 무엇을 요구하는지 것은 설명하기 어렵다 당신이 삼부작에 익숙하지 않다면 요.

해당 코드 줄은 공의 방향에 대한 단위 벡터를 계산합니다. 공의 방향에 대한 단위 벡터는 캐논에서 발생한다고 가정합니다. Cos와 Sin 부분은 대포 각의 X와 Y 성분을 각각 추출합니다. 그래서 대포가 가리키는 곳은 공이 쏘는 방향입니다.

결과가 실제 속도가 아닌 방향 일 가능성이 높기 때문에 약간의 혼란을줍니다. 볼에 최종 이동 속도를주기 위해 벡터에 상수를 곱하는 줄이 있다고 가정합니다.