绘制一个 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}
现在只需在每个点之间画一条线,你就应该有你的尖星。我希望这有帮助!
添加回答
举报
0/150
提交
取消