본문 바로가기
Programming/AutoCad .Net

[AutoCAD .Net] C# 점과 선 사이의 최단 거리 구하기

by 타임박스 2020. 7. 30.
반응형


✔ 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);
}
반응형

댓글