为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

SMILET 2021-11-03 15:56:49
绘制一个 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);该代码产生了一个非常好的尖星,但我觉得我仍然做错了......:
查看完整描述

1 回答

?
不负相思意

TA贡献1777条经验 获得超10个赞

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


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

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


查看完整回答
反对 回复 2021-11-03
  • 1 回答
  • 0 关注
  • 154 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信