【问题标题】:C# Windows Form Picture Box Drawing With MouseC# Windows 窗体用鼠标绘制图片框
【发布时间】:2018-10-07 16:59:39
【问题描述】:

编辑:现在可以使用此代码绘制一个 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);

该代码产生了一个非常好的尖星,但我觉得我仍然做错了......:result

【问题讨论】:

  • 欢迎来到 SO!请不要将您的代码添加为屏幕截图,而是将 sn-p 粘贴到您的问题中。
  • 为什么要标记java??

标签: java c# windows visual-studio paint


【解决方案1】:

我不认为这真的是一个编码问题,它更像是一个逻辑问题。但这是我的解决方法:

首先对所有点进行零索引。假设您的所有点都与零等距,这意味着 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,你会得到以下 8 点:

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}

现在只需在每个点之间画一条线,你就应该有你的尖星了。我希望这会有所帮助!

【讨论】:

  • 谢谢,由于某种原因我无法想象它!
  • 谁能解释一下为什么代码的工作方式与我编辑的帖子中的方式一样?
  • 解决了 - 做的有点不同。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-20
相关资源
最近更新 更多