반응형
* 아래 코드는 임의의 점이 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
반응형
'3D Algorithm' 카테고리의 다른 글
임의의 점 직육면체 외부/내부 판별(Point Inside Cube) (0) | 2024.06.13 |
---|---|
PLY File Format(포맷 정보) (0) | 2024.06.06 |
3차원 점 직선 투영(Point Line Projection) 방법2 (0) | 2024.05.17 |
CCW 정렬 알고리즘 (0) | 2024.04.23 |
내적을 이용한 특징점 계산 (0) | 2024.04.09 |