2015-01-12 5 views
-1

직사각형의 정점이 5 개 있습니다. 사각형을 특정 크기로 팽창시키고 싶습니다. x라고 해. 어떻게 그 점을 찍을 수 있습니까? 사각형은 System.Drawing.Rectangle 개체가 아닌 사용자 지정 구조체입니다. 제발 제안 해주세요.정점이 주어진 사각형 모양을 부 풀리는 방법

+2

이차원 사각형 네 정점을 갖고, 삼차원 구형 여덟있다. 음, 3D? 그리고 그게 무슨 뜻입니까 : _ 사각형을 특정 no_inflate ?? 요인으로 측면을 확대? – TaW

+0

첫 번째와 다섯 번째 꼭지점은 기본적으로 닫힌 사각형 모양으로 동일합니다. 그래서, 그것의 2 차원 직사각형. – WAQ

+0

나는 그것이 회전하고 있다고 가정한다 (그렇지 않으면 질문은 사소 할 것이다). 중선과 대각선의 각도를 계산할 것입니다. 각 모서리에 대한 거리 형식 MP는 새로운 모서리를 찾기 위해 인수로 곱할 수 있습니다. – TaW

답변

0

이것은 중앙에 사각형의 상대 팽창 :

struct Rect { 
     public PointF p1 { get; set; } 
     public PointF p2 { get; set; } 
     public PointF p3 { get; set; } 
     public PointF p4 { get; set; } 
     public PointF p5 { get; set; } 
    } 

    void RectResize() 
    { 
     // input rectangle and sample vertices 
     Rect input = new Rect(); 
     input.p1 = new PointF(80, 200); 
     input.p2 = new PointF(160, 340); 
     input.p3 = new PointF(470, 160); 
     input.p4 = new PointF(390, 20); 
     input.p5 = new PointF(80, 200); // same as p1 

     PointF[] r1 = { input.p1, input.p2, input.p3, input.p4 }; // conversion to array, easier to manipulate 
     float ratio = .3F; // inflation factor 
     PointF center = new PointF(r1[0].X + (r1[2].X - r1[0].X)/2, r1[0].Y + (r1[2].Y - r1[0].Y)/2); 
     PointF[] r2 = new PointF[4]; // output array 
     for (int i = 0; i < 4; i++) 
     { 
      r2[i].X = center.X + (r1[i].X - center.X) * ratio; 
      r2[i].Y = center.Y + (r1[i].Y - center.Y) * ratio; 
     } 

     // convert output to struct Rect if needed 
     Rect output = new Rect(); 
     output.p1 = r2[0]; output.p2 = r2[1]; output.p3 = r2[2]; output.p4 = r2[3]; output.p5 = r2[0]; 

     // demo 
     Graphics g = this.CreateGraphics(); 
     g.DrawPolygon(Pens.Blue, r1); 
     g.DrawPolygon(Pens.Red, r2); 
    }