Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 1
Регистрация: 19.10.2014
Сообщений: 40
1

Как сделать так, чтобы линии не перекрывали фигуры?

14.02.2015, 14:24. Показов 1276. Ответов 15
Метки нет (Все метки)

Делаю редактор графа, и столкнулся с одной проблемой - при рисовании ребер графа линии перекрывают вершину, так как рисую линию от центра к центру окружности:
Как сделать так, чтобы линии не перекрывали фигуры?

Можно как-то сделать, чтобы линии не перекрывали окружности? Т.е. вот так:
Как сделать так, чтобы линии не перекрывали фигуры?
0
Вложения
Тип файла: zip BFS1.zip (42.5 Кб, 5 просмотров)
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.02.2015, 14:24
Ответы с готовыми решениями:

Как сделать, чтобы запоминалось конечное положение фигуры и начинала выпадать следующая?
Как сделать, чтобы запоминалось конечное положение фигуры и начинала выпадать следующая? namespace...

Как отрисовывать линию, соединяющую две фигуры, так, чтобы она не пересекала эти фигуры и другие линии
Подскажите, пожалуйста, как отрисовывать линию, соединяющую две фигуры, так, чтобы она не...

Как сделать так, чтобы тело двигалось по линии шара?
Как сделать так, чтобы тело двигалось по линии шара? плиз

Графика: сделать так, чтобы две линии, исходящие из одной точки, как бы шагали
надо сделать так, чтобы две линии, исходящие из одной точки, как бы шагали. пожалуйста

__________________

Записывайтесь на профессиональные курсы С#-разработчиков‌
15
Эксперт .NETАвтор FAQ
9852 / 4807 / 1730
Регистрация: 11.01.2015
Сообщений: 5,988
Записей в блоге: 34
14.02.2015, 14:44 2
Цитата Сообщение от kalyashov Посмотреть сообщение
Можно как-то сделать, чтобы линии не перекрывали окружности? Т.е. вот так:
Вы рисуете только окружности, а вам нужно еще и закрашивать кружки (метод Graphics.FillEllipse(...))
0
0 / 0 / 1
Регистрация: 19.10.2014
Сообщений: 40
14.02.2015, 14:51  [ТС] 3
Storm23, я думал об этом, но это не очень хороший выход, так как в кружке есть цифра и в любом случае линия будет пересекать её
0
Эксперт .NETАвтор FAQ
9852 / 4807 / 1730
Регистрация: 11.01.2015
Сообщений: 5,988
Записей в блоге: 34
14.02.2015, 14:56 4
kalyashov, Рисуем в таком порядке:
1) Линии
2) Кружки
3) Окружности
4) Цифры

Цифры рисуются внутри закрашенного кружка и никакие линии их пересекать не будут.
0
0 / 0 / 1
Регистрация: 19.10.2014
Сообщений: 40
14.02.2015, 15:41  [ТС] 5
Storm23, это граф, линии(т.е. ребра графа) нельзя провести без кружков(вершин графа), сначала добавляются вершины с нумерацией, а потом уже добавляются ребра, поэтому так тоже не получится
0
Эксперт .NETАвтор FAQ
9852 / 4807 / 1730
Регистрация: 11.01.2015
Сообщений: 5,988
Записей в блоге: 34
14.02.2015, 17:59 6
kalyashov,
Посмотрел код ваш... Как все запущено. Мне вот инетерсно, а сейчас в вузах вообще не учат создавать модели данных или там отделение интерфейса от данных? Вообще все? Или учат рисовать графы прямо в pictureBox1 ?
А вот еще интересно, как вы собираетесь делать какой-то там поиск в графе если у вас ребра графа нигде кроме кртинки не хранятся... Вы прямо в пикчербоксе будете обход графа делать?
0
0 / 0 / 1
Регистрация: 19.10.2014
Сообщений: 40
14.02.2015, 18:07  [ТС] 7
Storm23, в коде нормально всё, это всего лишь набросок, в вузе не учат работать с Windows Forms - в этом затруднение, алгоритм поиска в ширину у меня готов, но отдельно, нужно его визуализировать, но так как я не работал с Windows Forms, то поэтому решил разделить задачу по частям - сначала решил освоить всё, что понадобится для рисования. Всё, что касается вершин и ребер, будет храниться в матрице смежности, в PictureBox'e только визуализация действий.
Если у Вас нет ответа по существу или совета, то не засоряйте тему.
0
Эксперт .NETАвтор FAQ
9852 / 4807 / 1730
Регистрация: 11.01.2015
Сообщений: 5,988
Записей в блоге: 34
14.02.2015, 18:10 8
Цитата Сообщение от kalyashov Посмотреть сообщение
Если у Вас нет ответа по существу или совета, то не засоряйте тему.
Советы у меня есть, я их вам уже дал, просто вы их не понимаете.
Цитата Сообщение от kalyashov Посмотреть сообщение
не засоряйте тему.
Ой, извините
0
1724 / 1049 / 387
Регистрация: 13.06.2013
Сообщений: 3,571
14.02.2015, 22:17 9
kalyashov, правильно вам Storm23 говорит. Делайте нормальную архитектуру,и тогда проблем с этим
Цитата Сообщение от kalyashov Посмотреть сообщение
это граф, линии(т.е. ребра графа) нельзя провести без кружков(вершин графа),
не будет. Визуализация должна идти в самом конце. К этому моменту все элементы графа должны быть известны и они разом отрисовываются в нужном порядке.
0
0 / 0 / 1
Регистрация: 19.10.2014
Сообщений: 40
14.02.2015, 22:19  [ТС] 10
tarasalk, как они могут быть известны? Пользователь сам задает нужные вершины и ребра, сам алгоритм у меня сделан, проблема только с Windows Forms, точнее уже нет, всё сделал.
0
1724 / 1049 / 387
Регистрация: 13.06.2013
Сообщений: 3,571
14.02.2015, 22:25 11
Цитата Сообщение от kalyashov Посмотреть сообщение
как они могут быть известны? Пользователь сам задает нужные вершины и ребра
Какая разница? он ввел значения, нажал кнопку...граф изменился, его нужно перерисовать. Читай: перерисовать все, а не поверх прошлого изображения как у тебя.
0
0 / 0 / 1
Регистрация: 19.10.2014
Сообщений: 40
14.02.2015, 22:27  [ТС] 12
tarasalk, ну я так и делаю, только перерисовываю изменившиеся элементы.
0
1724 / 1049 / 387
Регистрация: 13.06.2013
Сообщений: 3,571
14.02.2015, 22:36 13
kalyashov, Совсем не так. Вы ничего не перерисовываете, а только добавляете к уже существующему изображению. Если вдруг нужно будет менять положение вершин, ваш код умрет полностью. По крайней мере тот код, что есть в теме.
0
0 / 0 / 1
Регистрация: 19.10.2014
Сообщений: 40
14.02.2015, 22:38  [ТС] 14
tarasalk, ну да, но положение вершины изменять не нужно будет, всё проще.
0
8151 / 4415 / 1730
Регистрация: 11.02.2013
Сообщений: 9,392
15.02.2015, 03:31 15
Лучший ответ Сообщение было отмечено kalyashov как решение

Решение

Функция для вычисления координат отрезка, соединяющего две окружности:
C#
1
2
3
4
5
6
7
8
9
10
11
PointF[] SegmentBetweenCircles(PointF c1, float r1, PointF c2, float r2) {
    PointF[] vertices = new PointF[2] { new PointF(), new PointF() };
    float d = (float)Math.Sqrt(Math.Pow(c1.X - c2.X, 2) + Math.Pow(c1.Y - c2.Y, 2));
    float lambda = r1 / (d - r1);
    vertices[0].X = (c1.X + lambda * c2.X) / (1 + lambda);
    vertices[0].Y = (c1.Y + lambda * c2.Y) / (1 + lambda);
    lambda = (d - r2) / r2;
    vertices[1].X = (c1.X +lambda * c2.X) / (1 + lambda);
    vertices[1].Y = (c1.Y + lambda * c2.Y) / (1 + lambda);
    return vertices;
}
Пример использования — во вложении
2
Миниатюры
Как сделать так, чтобы линии не перекрывали фигуры?  
Вложения
Тип файла: zip JoinCircles.zip (13.5 Кб, 4 просмотров)
0 / 0 / 1
Регистрация: 19.10.2014
Сообщений: 40
15.02.2015, 14:14  [ТС] 16
ViterAlex, хорошее решение, только пока что не совсем разобрался в нём.
Подскажите, что можно почитать, чтобы лучше разобраться с Windows Forms, .Net и ООП в целом?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.02.2015, 14:14

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

как сделать так,чтобы все линии идеально совпадали при наложении одного объекта на другой?!
как сделать так,чтобы все линии идеально совпадали при наложении одного объекта на другой?! всегда...

Редактор блок-схем, как сделать так, чтобы линии соединяющие блоки сохранялись при перемещении блоков
Здравствуйте! Сел за написание курсовой работы и сильно заинтересовал один вопрос: Каждый блок...

Сделать так, чтобы при изменении размера окна, линии рисовались опять по центру
Нужно сделать так, чтобы при изменении размера окна, линии рисовались опять по центру, а фигуры...

Как сделать так чтобы страничка при увеличения разрешения не двигалась в разные стороны, и как сделать чтобы при открытии в опере и в других браузерах
все обьекты на странице не двигались в разные стороны???


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.