'수학'에 해당되는 글 1건

  1. [2007/01/24] 극좌표계(Polar Coordinates) 정리 (2)

극좌표계(Polar Coordinates) 정리

[개발]

3인칭 카메라에 많이 사용하는 극좌표계를 정리해봤다.


사용자 삽입 이미지


* 데카르트 좌표계에서 극좌표계로의 변환 공식

사용자 삽입 이미지


* 극좌표계에서 데카르트 좌표계로의 변환 공식

사용자 삽입 이미지

단, ,


* 소스

  void CartesianToSpherical( vec3 vec, float& out_r, float& out_phi, float& out_theta )
  {
  out_r = vec.Length();
  float x = vec.x;
  float y = vec.y;
  float z = vec.z;
  if( x > 0 )
  {
     out_phi = (float)atan( y / x );
  }
  else if( x < 0 && y > 0 )
  {
     out_phi = (float)atan( y / x ) + MMath::PI;
  }
  else if( x < 0 && y < 0 )
  {
     out_phi = (float)atan( y / x ) - MMath::PI;
  }
  else if( x == 0 && y > 0 )
  {
     out_phi = MMath::PI / 2;
  }
  else if( x == 0 && y < 0 )
  {
     out_phi = - (float)MMath::PI / 2;
  }
  if( z > 0 )
  {    
     out_theta = (float)atan( sqrt( x*x + y*y ) / z );
  }
  else if( z < 0 )
  {
     out_theta = (float)atan( sqrt( x*x + y*y ) / z ) + (float)MMath::PI;
  }
  else
  {
     // z == 0
     out_theta = MMath::PI / 2;
  }
  }
  vec3 SphericalToCartesian( float r, float phi, float theta )
  {
  float x = r * (float)sin(theta) * (float)cos(phi); // = r * cos(phi) * sin(theta)
  float y = r * (float)sin(theta) * (float)sin(phi); // = r * sin(phi) * sin(theta)
  float z = r * (float)cos(theta);
  return (vec3(x,y,z));
  }
2007/01/24 23:02 2007/01/24 23:02
TAG.

이 글의 트랙백 주소 :: http://mypage.sarang.net/tt/trackback/117

::: 사람과 사람의 교감! 人터넷의 첫 시작! 댓글을 달아주세요! :::

  1. darkart [2007/01/26 20:16]  [댓글주소]  [수정/삭제]  [댓글쓰기]

    ㄷㄷㄷ
    역시 프로그래머는 대단해..;

[로그인][오픈아이디란?]