2012-03-14 45 views
1

これは文法よりも論理の問題である可能性があります。だれかが助けてくれるかどうかはわかりませんが、ループバックして転送する必要があるRectangle型のリストがあります。C#再描画矩形ロジック

リストには、左から右にランダムな幅と高さを持つ長方形のランダムな範囲が含まれています。私は、だから私はこれを行う最も簡単な方法は、最初の矩形を取得し、それを比較することだと思う彼らは、次の

    ___________ 
____    l   l 
l l    l   l 
l l ________ l   l 
l__l___l______l l   l 
l_____________l___l_________l 
l___________________________l 

のように見えるように長方形を回転させる必要がある

    ___________ 
____    l   l 
l l    l   l 
l l ________ l   l 
l l___l  l l   l 
l l l  l___l   l 
l__l___l______l___l_________l 

次の1つに沿って。しかし、私はこれはそれが

に意味するように動作し、元の四角形を描画するためのコードである可能性インデックス

の範囲を出て行くよので、私は動けなくなるに沿って次の四角形の値を取得しようとすると、

Graphics RectangleGraphics = DrawingSurface; 

      for (int x = 0; x < userInput; ++x) 
      { 
       int Height = myRectangleClass.genHeight(); 
       int Width = myRectangleClass.genWidth(); 
       RectangleGraphics.DrawRectangle(Pen, myRectangleClass.MyRectangle(startPositionX, (450 - Height), Width, Height)); 

       ReadWrite.writeOutput(startPositionX, (450 - Height), Width, Height); 
       startPositionX = startPositionX + Width; 
      } 

私は同じ形状を維持したまま、長方形を回転させるために、次のコードを使用しようとしていますが、私は明らかに範囲エラーの出る

Graphics RectangleGraphics = DrawingSurface; 

     int previousX = 0; 
     int width = 0; 
     int height = 0; 
     int xCoordinate = 0; 
     int yCoordinate = 0; 


     for (int i = 0; i < Rectangles.Count; ++i) 
     { 
      if ((Rectangles[i].X < Rectangles[i + 1].X) && (Rectangles[i].Height > Rectangles[i + 1].Height)) 
      { 
       width = Rectangles[i].Width; 
       height = Rectangles[i].Height - Rectangles[i + 1].Height; 
       xCoordinate = Rectangles[i].X; 
       yCoordinate = 250 - height; 

       Rectangle DrawRec = myRectangleClass.MyRectangle(xCoordinate, yCoordinate, width, height); 
       RectangleGraphics.DrawRectangle(Pen, DrawRec); 
      } 
     } 

私は次の場合には、現在の四角形を見てする必要があります長方形はより高価ですhは増加する必要がありますが、現在の高さよりも低い矩形に達すると停止する必要があります。その矩形に達すると、シリーズの最初の矩形ではなく後方に移動する必要があります。

長方形を再描画する方法についてご意見やご提案がありましたら、お知らせください。

答えて

0

矩形を回転して再利用するのではなく、正しい出力矩形を生成するために入力として扱う方が簡単です。

これを簡単にするもう1つの方法は、それらを構築しようとするのではなく、目的の矩形を切り出すことです。

ここには簡単なアルゴリズムがあります。まず、あなたのパターンを反転させたクッキーカットの形が必要です。ここではクッキーカット形状です:

元から形成された
____________________________ 
1 1 1  1 1_________1 
1__1 1  1 1 
    1 1  1 1 
    1 1_______1 1 
    1__1  1 1 
       1___1 

    ___________ 
____    l   l 
l l    l   l 
l l ________ l   l 
l l___l  l l   l 
l l l  l___l   l 
l__l___l______l___l_________l 

今、あなたの全体の面積の大きさ

____________________________ 
1       1 
1       1 
1       1 
1       1 
1       1 
1       1 
1___________________________1 

はから最も高い矩形を取る長方形で始まりますカッター:

   _____  
       1 1  
       1 1 
       1 1 
       1 1 
       1 1 
       1___1 

は、このような大きな長方形を分割するために使用します:

____________________________ 
1    1###1   1 
1    1###1   1 
1  1  1###1 2 1 
1    1###1   1 
1    1###1   1 
1_____________1###1_________1 
1__________3________________1 

は、今すぐあなたの出力で3つの長方形を持っています。

カッターから次に大きい矩形を取ることによって続行:

____ 
    1 1  
    1 1  
    1 1  
    1 1 
    1__1 

計算することがで(それは一つだけであろう)、その矩形を分割するために使用されている出力矩形:

____________________________ 
1 1##1  1###1   1 
1 1##1  1###1   1 
1 1##1  1###1   1 
1 1##1  1###1   1 
1__1##1_______1###1   1 
1_____________1###1_________1 
1___________________________1 

など。最終的に回転パターンを生成します。

関連する問題