본문 바로가기
3D Algorithm

임의의 점 원기둥 내부/외부 판별 코드(c++)

by DarkRock 2024. 6. 3.
반응형

* 아래 코드는 임의의 점이 cylinder 내부/외부에 있는지 판별하는 코드입니다.

 

* 입력변수 설명
-  pt1: 원기둥 하단 중심점
-  pt2: 원기둥 상단 중심점
-  len: 원기둥 높이
-  radius: 원기둥 반지름:
-  pnt: 내부/외부 판별을 위한 임의의 점

struct Point
{
 	float x;
 	float y;
 	float z;
};
bool checkInsideCylinder(Point pt1, Point pt2, float len, float radius, Point pnt)
{	
	float length_sq = len * len;
	float radius_sq = radius * radius;

	float dx, dy, dz;
	float pdx, pdy, pdz;
	float dot, dsq;

	dx = pt2.x - pt1.x;
	dy = pt2.y - pt1.y;
	dz = pt2.z - pt1.z;

	pdx = pnt.x - pt1.x;
	pdy = pnt.y - pt1.y;
	pdz = pnt.z - pt1.z;

	dot = pdx * dx + pdy * dy + pdz * dz; 
	if (dot < 0.0 || dot > length_sq)		
		return false;	// 외부의 점
	else
	{
		dsq = (pdx*pdx + pdy * pdy + pdz * pdz) - dot * dot / length_sq; 
		if (dsq > radius_sq)				
			return false; // 외부의 점
		else					
			return true; // 내부의 점		
	}
}

출처: https://www.flipcode.com/archives/Fast_Point-In-Cylinder_Test.shtml

반응형