簡體   English   中英

用鼠標C#Windows窗體圖片框繪圖

[英]C# Windows Form Picture Box Drawing With Mouse

編輯:繪制一個4號尖的星星現在確實可以使用此代碼,但我真的不知道為什么這樣做,並且,如果我用相同的數字除以x和y,它只會給我一個菱形? 3&7似乎也是最好的價值,我不知道為什么...

  public AP4Star() { }

    public AP4Star(int x1, int y1, int x2, int y2, Color c, bool solid, float penW) : base(x1, y1, x2, y2, c, solid, penW) { }

    public override void Draw(Graphics g)
    {
        float xDisplacement = Math.Abs(getX1() - getX2());
        float yDisplacement = Math.Abs(getY1() - getY2());

        PointF top = new PointF((getX1() + getX2()) / 2, Math.Min(getY2(), getY1()));
        PointF bottom = new PointF(top.X, Math.Max(getY2(), getY1()));
        PointF left = new PointF(Math.Min(getX2(), getX1()), (top.Y + bottom.Y) / 2);
        PointF right = new PointF(Math.Max(getX2(), getX1()), left.Y);

        PointF mtr = new PointF(right.X - xDisplacement / 3, right.Y - yDisplacement / 7);
        PointF mbr = new PointF(right.X - xDisplacement / 3, right.Y + yDisplacement / 7);
        PointF mbl = new PointF(left.X + xDisplacement / 3, left.Y + yDisplacement / 7);
        PointF mtl = new PointF(left.X + xDisplacement / 3, left.Y - yDisplacement / 7);





        PointF[] fourStar = { top,mtr, right, mbr, bottom, mbl, left, mtl };

        g.DrawPolygon(new Pen(getColor(), getPenWidth()), fourStar);

該代碼產生了一個很好的尖角星,但我感覺我仍然在做這個錯誤...: 結果

我不認為這確實是一個編碼問題,而更多是邏輯問題。 但是這是我要解決的方法:

首先對所有點進行零索引。 假設所有點都與零等距,這意味着n = 10可以為您的初始菱形提供四個點,如下所示:

p1: { x = 0, y = 10}
p2: { x = 10, y = 0}
p3: { x = 0, y = -10}
p4: { x = -10, y = 0}

現在,只需將這些點中的每一個與n / 4的新點相加即可(如果為n / 2,那將是一條直線。因此n / 4 ...或大於2的任何點都應使您變得尖一點星)。 因此,如果我們使用n / 4,則會得到以下八點:

p1: { x = 0, y = 10}
p2: { x = 2.5, y = 2.5}
p3: { x = 10, y = 0}
p4: { x = 2.5, y = -2.5}
p5: { x = 0, y = -10}
p6: { x = -2.5, y = -2.5
p7: { x = -10, y = 0}
p8: { x = -2.5, y = 2.5}

現在只要在這些點之間畫一條線,就應該有尖的星星。 希望對您有所幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM