C # Окно формы рисования прямоугольника с мышью - PullRequest
0 голосов
/ 07 октября 2018

РЕДАКТИРОВАТЬ: Рисование четырехконечной звезды теперь работает с этим кодом, но я не знаю, ПОЧЕМУ это работает, И если я разделю на то же число для 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 Ответ

0 голосов
/ 07 октября 2018

Я не думаю, что это действительно вопрос кодирования, это скорее вопрос логики.Но вот как я это решу:

Начните с нуля индексирования всех ваших очков.Предполагая, что все ваши точки равноудалены от нуля, это означает, что 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}

Теперь просто нарисуйте линию между каждой из этих точек, и у вас должна быть заостренная звезда.Я надеюсь, что это полезно!

...