5

ランダムな角度で長方形を生成するコードがいくつかあります。

ここに画像の説明を入力

しかし、親の境界線で子の四角形を切り取る必要があります。

ここに画像の説明を入力

私のコード: http://pastebin.com/b6ry8j68

誰でもアルゴで私を助けることができますか?

4

2 に答える 2

5

SetClipプロパティを使用すると、非常に簡単に実行できます。

基本的に、次のコードを追加する必要があります。

           if (!pre_defined)
            {
                g.SetClip(new Rectangle(x, y, 600, 300));
            }

drawline コマンドの直前。ここで、x と y は親長方形の座標です。関数から簡単に取得できます。

これは機能する完全な機能です:

  public void drawRectangle(double Width, double Height, int A, bool pre_defined)
    {
        Graphics g = pictureBox1.CreateGraphics();
        g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
        g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;

        System.Drawing.Brush brush = new System.Drawing.SolidBrush(Color.FromArgb(r.Next(0, 251), r.Next(0, 251), r.Next(0, 251)));
        Pen myPen = new Pen(brush, 2);
        myPen.Width = 2;
        int x = center.X;
        int y = center.Y;
        //top left
        P[0] = new PointF((float)Math.Round(x + (Width / 2) * Math.Cos(A) + (Height / 2) * Math.Sin(A)), (float)Math.Round(y - (Height / 2) * Math.Cos(A) + (Width / 2) * Math.Sin(A)));
        //top right
        P[1] = new PointF((float)Math.Round(x - (Width / 2) * Math.Cos(A) + (Height / 2) * Math.Sin(A)), (float)Math.Round(y - (Height / 2) * Math.Cos(A) - (Width / 2) * Math.Sin(A)));
        //bottom left
        P[2] = new PointF((float)Math.Round(x + (Width / 2) * Math.Cos(A) - (Height / 2) * Math.Sin(A)), (float)Math.Round(y + (Height / 2) * Math.Cos(A) + (Width / 2) * Math.Sin(A)));
        //bottom right
        P[3] = new PointF((float)Math.Round(x - (Width / 2) * Math.Cos(A) - (Height / 2) * Math.Sin(A)), (float)Math.Round(y + (Height / 2) * Math.Cos(A) - (Width / 2) * Math.Sin(A)));
        if (!pre_defined)
        {
            g.SetClip(new Rectangle(50, 50, 600, 300));
        }
        g.DrawLine(myPen, P[0], P[1]);
        g.DrawLine(myPen, P[1], P[3]);
        g.DrawLine(myPen, P[3], P[2]);
        g.DrawLine(myPen, P[2], P[0]);
    }

編集:
これは完全な例ではありません。これは、Clip を親の幅と高さにのみ設定するためです。各要素の幅と高さを提供するように関数を変更する必要があります。しかし、あなたが提供してくれた写真を見てみると、思ったよりも複雑に見えます。
おそらく、すべてのランダム値の配列を保存し、それをサイズ順に並べてから、すべての要素を描画することになります。

于 2012-11-12T07:08:53.407 に答える