🎨DirectX

[DX] 구면 좌표계(Spherical Coordinate System)

공대 컴린이 2023. 2. 13. 10:41
728x90

🌏 구면 좌표계 (Spherical Coordinate System)

구면 좌표계는 3차원 공간을 한 점 (r, θ, φ)로 나타낸다. 

3차원 공간을 나타내기 위해, 원점에서의 거리(r), 양의 방향의 z축과 이루는 각도(θ), z축을 축으로 양의 방향의 x축과 이루는 각(φ)을 이용하여 나타낸다.

  • p : 원점에서 p 까지의 거리
  • θ : 양의 방향의 z축과 이루는 각도
  • φ :  z축을 중심으로 양의 방향의 x축과 이루는 각

 

구면 좌표계를 이용하면 원점에 관하여 대칭인 문제 해결에 유용하게 사용할 수 있다. 예를 들면 지구(행성)이 태양(항성)을 공전하는 것처럼 천체의 역학적인 위치와 움직임을 기술할 때 주로 사용된다.

 

직교좌표계에서의 x, y, z와 구면 좌표계에서의 r, θ,  φ 사이의 관계식

구면 좌표계 (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

 

728x90