powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Рисование фигур.
19 сообщений из 19, страница 1 из 1
Рисование фигур.
    #39561323
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С простыми фигурами все вроде ясно.
Но мне надо нарисовать что то более заковыристое - ромб, звездочку, стрелку. И тут я реально застопорился.
Вот например треугольник
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
 public void DrawItem(Radar radar, Graphics g)
        {
            PointF cp = radar.AzEl2XY(_azimuth, _elevation);
            PointF _topLeft = new PointF(cp.X - ((float)_width / 2), cp.Y - ((float)_height / 2));

            PointF p1 = new PointF((_topLeft.X + (_width / 2F)), _topLeft.Y);
            PointF p2 = new PointF(_topLeft.X, _topLeft.Y + _height);
            PointF p3 = new PointF(_topLeft.X + _width, _topLeft.Y + _height);

            _gp = new GraphicsPath(FillMode.Winding);
            _gp.AddPolygon(new PointF[] { p1, p2, p3 });

             g.FillPath(new SolidBrush(_color), _gp);
        }


А куда мне добавить четвертую точку чтоб получился ромб?
...
Рейтинг: 0 / 0
Рисование фигур.
    #39561365
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7,
Дай код ромба и скрин что вышло.
...
Рейтинг: 0 / 0
Рисование фигур.
    #39561375
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123jenya7,
Дай код ромба и скрин что вышло.

Код такой
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
 public void DrawItem(Radar radar, Graphics g)
        {
            PointF cp = radar.AzEl2XY(_azimuth, _elevation);
            PointF _topLeft = new PointF(cp.X - ((float)_width / 2), cp.Y - ((float)_height / 2));

            PointF p1 = new PointF((_topLeft.X + (_width / 2F)), _topLeft.Y);
            PointF p2 = new PointF(_topLeft.X,                   _topLeft.Y + _height);
            PointF p3 = new PointF(_topLeft.X + _width,          _topLeft.Y + _height);
            PointF p4 = new PointF(_topLeft.X + _width, _topLeft.Y + (2*_height));

            _gp = new GraphicsPath(FillMode.Winding);
            _gp.AddPolygon(new PointF[] { p1, p2, p3, p4 });

            g.FillPath(new SolidBrush(_color), _gp);
        }
...
Рейтинг: 0 / 0
Рисование фигур.
    #39561380
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7,
Теперь номера точек проставь. Рисовать надо по часовой или против.
...
Рейтинг: 0 / 0
Рисование фигур.
    #39561383
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7,

Или 2 тр. Спиной друг к другу))
...
Рейтинг: 0 / 0
Рисование фигур.
    #39561400
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123jenya7,
Теперь номера точек проставь. Рисовать надо по часовой или против.
а ктож знает номера точек.
мне не хватает несколько форм. я выбрал так
вертолет - треугольник вершиной вверх
корабль - прямоугольник
неизвестный объект - квадрат
подлодка - элипс
осталось самолет, снаряд и наземный объект. вот думал нарисовать ромб, многоугольник и еще что нибудь.
...
Рейтинг: 0 / 0
Рисование фигур.
    #39561408
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7,
Номера у тебя p1 - p4
...
Рейтинг: 0 / 0
Рисование фигур.
    #39561502
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я не понимаю - точка 0,0 - она слева сверху? если я откладываю по оси Х - нужно идти вправо, а по оси У - вниз?
...
Рейтинг: 0 / 0
Рисование фигур.
    #39561545
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7,
Угу. Негодяи))))
...
Рейтинг: 0 / 0
Рисование фигур.
    #39561564
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Наконец то я передал четыре вершины ромба правильно. Но он не закрасился.
...
Рейтинг: 0 / 0
Рисование фигур.
    #39561570
Pu4koff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7Наконец то я передал четыре вершины ромба правильно. Но он не закрасился.
Уже сказали же, что нужно рисовать по часовой или против часовой, а не в разноброд.
Грубо говоря:
p1 - верхняя вершина
p2 - правая вершина
p3 - нижняя вершина
p4 - левая вершина
...
Рейтинг: 0 / 0
Рисование фигур.
    #39561580
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Pu4koffjenya7Наконец то я передал четыре вершины ромба правильно. Но он не закрасился.
Уже сказали же, что нужно рисовать по часовой или против часовой, а не в разноброд.
Грубо говоря:
p1 - верхняя вершина
p2 - правая вершина
p3 - нижняя вершина
p4 - левая вершина
ура. спасибо. :)
...
Рейтинг: 0 / 0
Рисование фигур.
    #39561824
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне нужно каждую фигуру обвести кружочком. Не могу придумать алгоритм как это сделать. Где выбрать центр кружка и какой диаметр.
...
Рейтинг: 0 / 0
Рисование фигур.
    #39561861
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7Мне нужно каждую фигуру обвести кружочком. Не могу придумать алгоритм как это сделать. Где выбрать центр кружка и какой диаметр.
Возьми тетрадь в клетку. Нарисуй точки. Там просто.
...
Рейтинг: 0 / 0
Рисование фигур.
    #39562900
.NET
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7Мне нужно каждую фигуру обвести кружочком. Не могу придумать алгоритм как это сделать. Где выбрать центр кружка и какой диаметр.
Если нужна окружность именно минимального радиуса включающая в себя произвольный многоугольник, то это не совсем
тривиальная задача. Подробности освещены например здесь.

https://en.wikipedia.org/wiki/Smallest-circle_problem

А вот простой алгоритм, он просто строит окружность описывающую прямоугольник описывающий данный многоугольник.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
		private EllipseGeometry GetCircle(List<Point> _points)
		{
			var _maxX = _points.Select(x => x.X).Max();
			var _maxY = _points.Select(x => x.Y).Max();
			var _minX = _points.Select(x => x.X).Min();
			var _minY = _points.Select(x => x.Y).Min();

			var _size = Math.Sqrt((_maxX - _minX) * (_maxX - _minX) + (_maxY - _minY) * (_maxY - _minY));
			var _center = new Point((_minX + _maxX) / 2, (_minY + _maxY) / 2);

			var _circle = new EllipseGeometry(_center, _size / 2, _size / 2);

			return _circle;
		}


Получается вот такой результат
...
Рейтинг: 0 / 0
Рисование фигур.
    #39562952
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
jenya7Где выбрать центр кружка
Это центр тяжести
...
Рейтинг: 0 / 0
Рисование фигур.
    #39563228
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо. буду пробовать.
...
Рейтинг: 0 / 0
Рисование фигур.
    #39563671
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123jenya7,

Или 2 тр. Спиной друг к другу))

у каждого треугольника три спины
...
Рейтинг: 0 / 0
Рисование фигур.
    #39563679
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг ХупинPetro123jenya7,

Или 2 тр. Спиной друг к другу))

у каждого треугольника три спины
))) и главное, все 6 друг к другу.
Бывает.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Рисование фигур.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]