2014-02-17 2 views
1

퀵선 알고리즘을 통해 볼록 선체 점을 올바르게 계산했다고 가정하고, 선이있는 패널에 볼록 선체를 표시하려고합니다. 그러나 현재 내 중첩 된 for 루프는 계산 된 모든 단일 점을 통해 선을 표시합니다. 외부 점 사이에만 선을 그리는 방법이 있습니까? 내 루프 중첩 잘못과 같은 라인을 표시 나는 (울타리 같은) 외부의 주위에만 라인을 표시 할볼록 선각 점 사이의 선을 그리는 방법

enter image description here

. 어떻게해야합니까?

private void panel1_Paint(object sender, PaintEventArgs e) 
{ 
    if (pointsClicked.Count() == 0) 
    { 

    } 
    else 
    { 
     base.OnPaint(e); 
     using (Graphics g = e.Graphics) 
     { 
      var p = new Pen(Color.Black, 3); 


      // draw a line for each point created 
      for (int i = 0; i < convexHullPoints.Count() - 1; i++) 
      { 
       for (int j = 0; j < convexHullPoints.Count(); j++) 
       { 
        g.DrawLine(p, convexHullPoints[i], convexHullPoints[j]); 
       } 
      } 
     } 
    } 
} 

답변

2

는 단일 루프와 두 개의 중첩 for 루프를 교체하는 볼록 선체 다각형의 모든 가장자리을 반복 :

int n = convexHullPoints.Count(); 

// Draw the edges [P_{n-1},P_0], [P_0,P_1], ..., [P_{n-2},P_{n-1}] 
for (int i = n - 1, j = 0; j < n; i = j++) 
{ 
    g.DrawLine(p, convexHullPoints[i], convexHullPoints[j]); 
} 

참고 : 나는 convexHullPoints 배열의 포인트는 것을 여기에 가정입니다 볼록 선체를 따라 주문하면 그럴 수 없습니다. 그렇지 않은 경우에는 순서를 바꾸는 방법이 있습니다 (점의 중심을 계산하고 예를 들어 중심을 향한 지시 된 각도로 점을 정렬).

관련 문제