Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.10.2014, 20:54   #1
Аника Янковская
Пользователь
 
Регистрация: 23.10.2014
Сообщений: 58
По умолчанию Работа с канвой в Делфи 7 (нарисовать многоугольник по кликам мышкой)

Подскажите пожалуйста, как на канве по пикселам нарисовать произвольный многоугольник, с помощью щелчков мыши, и как определить площадь данного многоугольника, используя координаты точек многоугольника???
Аника Янковская вне форума Ответить с цитированием
Старый 23.10.2014, 21:48   #2
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,538
По умолчанию

Нужен будет массив - глобальная переменная, типа
Код:
var koord: array of TPoint ; // координаты вершинt
В обработчике события MouseUp или MouseDown берете X, Y и напонляете ими массив. Потом можно построить с помощью метода канвы PolyLine.
А можно без массива, при каждом клике следующую сторону многоугольника , с помощью методов LineTo и MoveTo.
type_Oleg вне форума Ответить с цитированием
Старый 23.10.2014, 21:53   #3
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 16,219
По умолчанию

С площадью проблема, ведь могут быть пересечения всевозможные.
Arigato вне форума Ответить с цитированием
Старый 23.10.2014, 22:03   #4
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,538
По умолчанию

Да и не только с площадью. Пользователю самому придётся следить за тем, чтобы не было пересечений. Иначе можнет получиться например так:
кликаешь 5 вершин правильного пятиугольника, но не по порядку, а в последовательности - 1-я вершина, 3-я, 5-я, 2-я, 4-я. Нажимаешь ОК, и программа рисует .. звезду, то есть 10-то угольник .
type_Oleg вне форума Ответить с цитированием
Старый 24.10.2014, 09:06   #5
Аника Янковская
Пользователь
 
Регистрация: 23.10.2014
Сообщений: 58
По умолчанию

А как правильно использовать массив - глобальная переменная и события MouseUp или MouseDown? Можете написать текст программы? А то что-то не получается(
Аника Янковская вне форума Ответить с цитированием
Старый 24.10.2014, 09:30   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Аника, вы поняли, что основная ваша проблема не нарисовать многоугольник по точкам, а найти его площадь? В случае взаимопересечений сторон это далеко не тривиальная задача!

для примера, за минуту набросал два многоугольника в гр.редакторе.
Для удобства я взял полигон с заливкой. Теперь, хотя бы видно, площадь чего надо найти. Если эту заливку убрать (а у Вас на канве этой заливки не будет - то аадача становится не только не тривиально, но и зрительно не очевидной...

mnogougol.jpg

А нарисовать многоугольник по кликам мышки - это, как раз, не сложно!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.10.2014, 10:06   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Как понял не залитые участки не входят в расчет площади. А на каком основании? Какое-то правило есть?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 24.10.2014, 11:28   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Аватар
Как понял не залитые участки не входят в расчет площади. А на каком основании? Какое-то правило есть?
Погодите. я данные участки не заливал.
Я выбрал рисование полигона с заливкой, дальше уже сам редактор высчитывал, какие области включены в полигон (и поэтому заливаются), а какие - внешние, поэтому без заливки. Важно то, что точки в редакторе ставятся последовательно (очевидно, что от порядка обхода вершин можно получить совершенно разные многоугольники)!

Возвращаясь к задаче. Я бы лично, если бы делал подобную задачу, вообще ввёл ограничения на многоугольники с самопересечением сторон. Прямо во время задания вершин проверял и, если очередная вершина приводит к тому, что любые две стороны пересекаются, ругался бы сообщением и эту вершину НЕ ставил.
Тогда задача резко упрощается!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.10.2014, 11:41   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

А может и не надо ограничений. Вот интересная статья по поводу вычисления площади самопересекающегося многоугольника. Никогда не думал, что такие хитрости
http://stu.sernam.ru/book_klein2.php?id=5
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 24.10.2014, 13:05   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
А может и не надо ограничений.
А может и не надо...
Но я, например, по этой статье сразу код написать не готов.
Но, с другой стороны, мне и не надо этот код писать - это же проблемы TC.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
программа на паскале, в которой можно нарисовать несколько окружностей произвольного радиуса мышкой в графическом режиме А1иночка Помощь студентам 9 11.04.2012 00:19
Работа с Канвой, Шейпы Arkuz Общие вопросы Delphi 0 17.12.2010 01:58
Работа с канвой Delphi (Математический расчёт) Dancewithevil Помощь студентам 1 20.05.2010 10:13
нарисовать стрелку на делфи studentOne Помощь студентам 7 17.11.2009 07:36
Работа с мышкой Klio Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 03.05.2008 22:37