[DX] 구면 좌표계(Spherical Coordinate System)
🌏 구면 좌표계 (Spherical Coordinate System)
구면 좌표계는 3차원 공간을 한 점 (r, θ, φ)로 나타낸다.
3차원 공간을 나타내기 위해, 원점에서의 거리(r), 양의 방향의 z축과 이루는 각도(θ), z축을 축으로 양의 방향의 x축과 이루는 각(φ)을 이용하여 나타낸다.
![]() |
![]() |
- p : 원점에서 p 까지의 거리
- θ : 양의 방향의 z축과 이루는 각도
- φ : z축을 중심으로 양의 방향의 x축과 이루는 각
구면 좌표계를 이용하면 원점에 관하여 대칭인 문제 해결에 유용하게 사용할 수 있다. 예를 들면 지구(행성)이 태양(항성)을 공전하는 것처럼 천체의 역학적인 위치와 움직임을 기술할 때 주로 사용된다.

구면 좌표계 (r, θ, φ)와 직각 좌표계 (x1, x2, x3) 사이의 변환식은 위와 같다.

좌표의 특성 상 여러 좌표가 한 점을 나타낼 수 있기 때문에 r은 0 보다 크거나 같고, 세타와 파이의 범위 또한 지정해놓는다.

위 사진은 직각 좌표계와 구면 좌표계를 함께 표현한 그림으로 두 좌표계의 관계를 확인해볼 수 있다.
DirectX에서 구면 좌표계를 이용하여 점 p를 향하는 벡터를 작성해보았다.
float phiStep = Math::PI / stackCount;
float thetaStep = Math::PI * 2.0f / sliceCount; // 360도 나누기 sliceCount
for (UINT i = 1; i <= stackCount - 1; i++)
{
float phi = i * phiStep;
for (UINT k = 0; k <= sliceCount; k++)
{
float theta = k * thetaStep;
// 구면 좌표계
Vector3 p = Vector3
(
radius * sinf(phi) * cosf(theta),
radius * cos(phi),
radius * sinf(phi) * sinf(theta)
);
Vector3 n;
D3DXVec3Normalize(&n, &p);
Vector2 uv = Vector2(theta / (Math::PI * 2), phi / Math::PI);
v.push_back(MeshVertex(p.x, p.y, p.z, uv.x, uv.y, n.x, n.y, n.z));
}
}

참조
https://blog.naver.com/qio910/221499166816
구면 좌표계(Spherical Coordinate System)
이전 공부 구면 좌표계(Spherical coordinate system)는 3차원 공간의 한 점을 (r, θ, φ)로 나타냅니다....
blog.naver.com
https://steemit.com/kr/@hunhani/4cfvsr-chapter-7
[수리물리학 이야기] Chapter 7. 원통좌표계, 구면좌표계 — Steemit
안녕하세요. 훈하니 @hunhani입니다. @beoped 님과 @yurizard 님께 자극을 받고 저도 기초적인 수리물리 내용의 포스팅을 도전해보기로 마음먹었습니다. 두 분에 비하면 한참 못 미칠 내용 혹은 이미 중
steemit.com