用鼠标C#Windows窗体图片框绘图

时间:2018-10-07 16:59:39

标签: java c# windows visual-studio paint

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

1 个答案:

答案 0 :(得分:0)

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

首先对所有点进行零索引。假设所有点都与零等距,这意味着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}

现在只需在每个点之间画一条线,您就应该拥有尖的星星。希望对您有所帮助!