繪制一個 4 尖星現(xiàn)在可以使用此代碼,但我真的不知道為什么會這樣,如果我用相同的數(shù)字除以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);該代碼產(chǎn)生了一個非常好的尖星,但我覺得我仍然做錯了......:
1 回答

不負(fù)相思意
TA貢獻1777條經(jīng)驗 獲得超10個贊
我不認(rèn)為這真的是一個編碼問題,它更像是一個邏輯問題。但這是我解決它的方法:
首先對所有點進行零索引。假設(shè)您的所有點都與零等距,這意味著 n = 10 為您的初始鉆石提供如下四個點:
p1: { x = 0, y = 10}
p2: { x = 10, y = 0}
p3: { x = 0, y = -10}
p4: { x = -10, y = 0}
現(xiàn)在只需將每個點與一個具有 n / 4 的新點相加(如果它是 n / 2,它將是一條直線。所以 n / 4 ... 或任何大于 2 的值,應(yīng)該會給你一個尖尖的星星)。所以如果我們使用 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}
現(xiàn)在只需在每個點之間畫一條線,你就應(yīng)該有你的尖星。我希望這有幫助!
添加回答
舉報
0/150
提交
取消