반응형
✔ C# - 점과 직선사이의 최단거리 구하기
AutoCAD에서 하나의 라인과 포인트를 선택하고 최단거리를 구하는 함수입니다.
Point3d point -> AutoCAD에서 선택된 포인트를 넘겨받음
Point3d lineStartPoint -> AutoCAD에서 선택된 라인의 시작 포인트를 넘겨받음
Point3d lineEndPoint -> AutoCAD에서 선택된 라인의 끝 포인트를 넘겨받음
//직선과 점의 최단 거리를 구하는 함수
private double GetShortestDistance(Point3d point, Point3d lineStartPoint, Point3d lineEndPoint)
{
//X의 길이, Y의 길이를 계산
double dx = lineEndPoint.X - lineStartPoint.X;
double dy = lineEndPoint.Y - lineStartPoint.Y;
//선이 아니라 포인트일 경우 점과 점의 거리 반환
if ((dx == 0) && (dy == 0))
{
dx = point.X - lineStartPoint.X;
dy = point.Y - lineEndPoint.Y;
return Math.Sqrt(dx * dx + dy * dy);
}
double t = ((point.X - lineStartPoint.X) * dx + (point.Y - lineStartPoint.Y) * dy) / (dx * dx + dy * dy);
if (t < 0)
{
dx = point.X - lineStartPoint.X;
dy = point.Y - lineStartPoint.Y;
}
else if (t > 1)
{
dx = point.X - lineEndPoint.X;
dy = point.Y - lineEndPoint.Y;
}
else
{
Point3d closestPoint = new Point3d(lineStartPoint.X + t * dx, lineStartPoint.Y + t * dy, 0);
dx = point.X - closestPoint.X;
dy = point.Y - closestPoint.Y;
}
return Math.Sqrt(dx * dx + dy * dy);
}
반응형
'Programming > AutoCad .Net' 카테고리의 다른 글
[AutoCAD .Net] UnSelect Obejects In Document (0) | 2020.05.27 |
---|---|
[AutoCAD .Net] Get Selected Objects In Document (0) | 2020.05.27 |
[AutoCAD .Net] ObjectARX Download (0) | 2020.04.21 |
[AutoCAD .Net] ObjectARX 다운로드 설치 및 개발 환경 구축 (0) | 2020.04.21 |
[AutoCAD .Net] .dll file Load/UnLoad 방법 (0) | 2020.04.17 |
댓글