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

绘制一个 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);

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

http://img3.mukewang.com/618240ea00011d1407470569.jpg


SMILET
浏览 155回答 1
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,你会得到以下八点: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.5p7: { x = -10, y = 0}p8: { x = -2.5, y = 2.5}现在只需在每个点之间画一条线,你就应该有你的尖星。我希望这有帮助!
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java