Nadi G. Ответов: 1

Как нарисовать прямую линию, которая проходит по диагоналям прямоугольника ?


Я пытаюсь нарисовать прямую линию с помощью метода DrawLine ().Если кто-то знает, как это сделать, пожалуйста, помогите.Спасибо.

Что я уже пробовал:

public override void DrawSelf(Graphics grfx)
       {
           base.DrawSelf(grfx);

          grfx.FillRectangle(new SolidBrush(FillColor), Rectangle.X, Rectangle.Y, Rectangle.Width, Rectangle.Height);
          grfx.DrawRectangle(Pens.Black,Rectangle.X, Rectangle.Y, Rectangle.Width, Rectangle.Height);

          grfx.DrawLine(Pens.Black, Rectangle.Left, Rectangle.Top, Rectangle.Right, Rectangle.Bottom);
          grfx.DrawLine(Pens.Black, Rectangle.Right , Rectangle.Top , Rectangle.Left, Rectangle.Bottom );
          grfx.DrawLine(Pens.Black, Rectangle.Right, Rectangle.Top, Rectangle.Left+Rectangle.Right, Rectangle.Bottom);

       }

1 Ответов

Рейтинг:
1

OriginalGriff

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

grfx.DrawLine(Pens.Black, Rectangle.Right, Rectangle.Top, Rectangle.Left+Rectangle.Right, Rectangle.Bottom);
Поскольку и левый, и правый будут положительными, left + rigth будет больше, чем только правый (если только левый не равен нулю, и в этом случае это вертикальная линия, которую вы уже нарисовали).


Nadi G.

Я нарисовал диагонали и теперь пытаюсь нарисовать линию, которая проходит через середину прямоугольника.

OriginalGriff

Вертикальная линия посередине будет
X = left + (right - left) / 2, Y = top
к
X = то же самое, Y = дно.

Nadi G.

Спасибо.

OriginalGriff

Всегда пожалуйста!

Nadi G.

Как провести линию только к центру, а не по всему диаметру?
Мне нужно взять сторону/2 и взять половину линии
извините, что спрашиваю, но мое математическое мышление плохо.

OriginalGriff

Очень трудно понять из вашего описания, что именно вы хотите сделать, а без этого практически невозможно сказать вам.
Так... возьмите карандаш и бумагу и нарисуйте прямоугольник.
Обозначьте горизонтальные линии от L до R и W как длину. (Левая, правая ширина).
Проделайте то же самое с вертикалями: от т до В, Н.
Теперь нарисуйте диагонали и обозначьте центр: это (L + (R - L) / 2, T + (B - T) / 2)

Теперь добавьте линии, которые вы пытаетесь нарисовать, и должно быть очевидно, где они начинаются и заканчиваются!.

Nadi G.

Спасибо.

Nadi G.

Есть ли способ нарисовать треугольник с помощью метода Polygon, но с помощью Recatngle(.Ширина,.Высота,.X,.Y)?

Nadi G.

Я знаю, что могу нарисовать его с помощью точек [], но я хочу нарисовать его с помощью класса Rectangle, потому что я хочу поместить в него линии

OriginalGriff

Нет, потому что класс Rectangle всегда определяет четырехсторонние объекты. Это часть определения прямоугольника: четыре стороны, не больше и не меньше.

Nadi G.

база.DrawSelf(grfx);
Система.Рисование.PointF[] points = {
новая система.Рисование.PointF(Location.X+Ширина/2, Расположение.Y),
новая система.Рисование.PointF(Location.X+Ширина, Расположение.Y+Высота),
новая система.Рисование.PointF(Location.X, Местоположение.Y+Высота)
};
grfx.FillPolygon(new SolidBrush(Color.Белая точка);
grfx.DrawPolygon(новое перо(цвет.Черный, ширина: 4.0 F), точки);
grfx.DrawLine(ручки.черный прямоугольник.Слева + (Прямоугольник.Справа - Прямоугольник.Слева) / 2, Прямоугольник.Сверху - Прямоугольник.Справа + (Прямоугольник.Слева - Прямоугольник.Справа) / 2, Прямоугольник.Дно);
grfx.DrawLine(ручки.черный прямоугольник.Слева+103 , Прямоугольник.Топ-32 + (Прямоугольник.Внизу - Прямоугольник.Сверху) / 2, Прямоугольник.Правильно , Прямоугольник.Дно);
grfx.DrawLine(ручки.черный прямоугольник.Справа-103, Прямоугольник.Топ - 32 + (Прямоугольник.Внизу - Прямоугольник.Сверху) / 2, Прямоугольник.Слева - Прямоугольник.Дно);

Nadi G.

я нашел способ, но не знаю, как сделать трапецию?

OriginalGriff

Да ладно тебе!
Если вы можете нарисовать треугольник, то трапеция-это только одна дополнительная точка!

            points = new PointF[] { new PointF(50, 50), new PointF(200, 200), new PointF(300, 200), new PointF(400, 50) };
            grfx.FillPolygon(new SolidBrush(Color.Blue), points);

Nadi G.

Спасибо, что помогли мне!