|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
03.10.2013, 11:24 | #1 |
Пользователь
Регистрация: 26.05.2013
Сообщений: 13
|
Многоугольник без самопересечений
Здравствуйте, суть задачи в следующем, надо на C# написать программу которая рисует многоугольник с заданным количеством вершин и случайными координатами так, чтобы отсутствовали самопересечения.
На мой взгляд вполне логично использовать два уравнения прямых заровняв их по У координате, и найти возможную точку пересечения, а после проверить принадлежит ли она обоим ребрам, и если да, то соответственно поменять координату. Составил вот такой алгоритм: Код:
|
03.10.2013, 11:34 | #2 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,882
|
Весь проект киньте, поглядим )
|
03.10.2013, 12:46 | #3 |
Пользователь
Регистрация: 26.05.2013
Сообщений: 13
|
Код:
уж поглядите пожалуйста) Последний раз редактировалось Izotic; 03.10.2013 в 14:11. |
03.10.2013, 18:57 | #4 |
Форумчанин
Регистрация: 03.10.2013
Сообщений: 142
|
Вариант
1. генер-я новой точки 2. если точек 3 и больше - проверить последний отрезок с пред-ми на пересечения 3. если есть пересечение - переген-ть точку +поставить лимит на кол-во повторных генераций (вариант - последняя точка ну никак не может быть без пересечений). Имхо - генерировать че попало а потом пытаться исправить, какой то сложный. |
03.10.2013, 18:59 | #5 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,882
|
Вообще, проект это не код, а всё что есть, ибо форма задизайнена и всё такое (например чарт, я ж не знаю как настроен), потом, у Вас тут текстбокс, надо знать какие значения вводить чтобы увидеть разное поведение проги (например при цифре 5 рисует правильно а при 10 - нет) и Вы должны всё это указать, иначе как понять в чём у Вас проблема ? телепатировать до посинения ? лично у меня нет времени на это.
Я открыл студию вставил ваш код в новый винформс проект, кинул 2 батона текстбокс и чарт, на батоны повешал соотв обработчики. Запускаю, ввожу цифру 1 - нажимаю сперва первую кнопку потом вторую и ошибка выхода индекса на коде chart1.Series[1].Points.AddXY(X[i], Y[i]); то же самое с и со значением 10 и 24, тоже самое для всех цифр при нажатии сразу второй кнопки. Код разбирать не хочется времени тратить, тем более что он запутанный, как обычно это бывает. Давайте весь проект и все входные данные и опишите чего надо добиться (понять что решается правильно) - вдруг не только непересечения линий. |
03.10.2013, 19:02 | #6 | |
Пользователь
Регистрация: 26.05.2013
Сообщений: 13
|
simples
Ну так в принципе тут и заложена эта идея, только проверяются уже готовые комбинации точек и в случае удовлетворения условию меняются Цитата:
phomm Спасибо что ответили, сейчас попробую выложить проект на народ, потому что здесь не нашел кнопки прикрепить файл.) вот ссылка http://yadi.sk/d/Lxs6r9rCALUtH Значит там еще есть третья кнопка, реализующая вычисление площади этого самого многоугольника методом монте-карло но к ней алгоритм уже есть (был в предыдущей задаче) вот только без работающего алгоритма пересечений его не сделать... Входящие условия касательно многоугольника такие: 1. количество вершин многоугольника задается пользователем, не больше 15(как сказал препод слишком долго считать будет) 2. координаты вершин также задаются с клавиатуры, если они не заданы, то генерятся случайные координаты, вещественные, в пределах [0,10] 3. Обязательным условием является то, чтобы самопересечения ребер многоугольника не было 4. Ну и вписать многоугольник в прямоугольник (ну с этой задачей я вроде справился)) заранее спасибо Собственно все чего не хватает, это алгоритма определяющего пересечение и исправляющее координаты вершин так чтобы многоугольник не пересекался Последний раз редактировалось Stilet; 05.10.2013 в 11:35. |
|
03.10.2013, 19:38 | #7 | |
Форумчанин
Регистрация: 03.10.2013
Сообщений: 142
|
Цитата:
Алгоритм проверки пересечения отрезков тут есть (не проверял, как и Ваш не осмысливал особо если честно) http://stackoverflow.com/questions/5...ts-a-rectangle От этого я и предлагаю отказаться своим вариантом алгоритма. Последний раз редактировалось simples; 03.10.2013 в 19:47. |
|
03.10.2013, 20:08 | #8 | |
Пользователь
Регистрация: 26.05.2013
Сообщений: 13
|
simples
а мне по любому такой алгоритм понадобиться чтобы метод трассировки луча после реализовать, поэтому и не могу от него отказаться алгоритм здесь очень похож на мой, только не совсем понятно что за координаторы они используют и почему проверка только между [0,1] Цитата:
Последний раз редактировалось Izotic; 03.10.2013 в 20:18. |
|
03.10.2013, 20:43 | #9 |
Форумчанин
Регистрация: 03.10.2013
Сообщений: 142
|
|
03.10.2013, 21:42 | #10 |
Пользователь
Регистрация: 26.05.2013
Сообщений: 13
|
simples
может так понятней будет, да, координаты случайны, но по коду видно, что последняя точка равна первой, следовательно, даже если точки расположены спиралью, надо вывернуть точки так, чтобы они превратились в замкнутый многоугольник без пересечений ребер кроме как в местах вершин |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
правильный многоугольник | fist001 | C++ Builder | 7 | 10.06.2011 21:50 |
Многоугольник и круг | Никита_96 | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 09.02.2011 21:10 |
Многоугольник без самопересечения С++ | kochet-kov | Помощь студентам | 0 | 23.12.2010 01:18 |
Динамический многоугольник. | alex_8 | Общие вопросы C/C++ | 1 | 01.12.2010 17:55 |
Звёздчатый многоугольник | Alex_FF | Помощь студентам | 0 | 30.12.2009 01:24 |