![]() |
|
|
![]()
|
|
| Marathon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 2.12.2015 Репутация: нет Всего: нет |
Доброе утро, форумчане. Есть программа, определяет выпуклый ли многоугольник или нет, и принадлежит ли заданная точка дачному полигону. Но просят сделать ввод координат точки, и координаты вершин через форму, раньше никогда не имел дело с этим, подскажите, пожалуйста, как это можно реализовать.
|
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 4 Всего: 72 |
На чем программируешь? (Visual Studio, C++Builder, Qt, etc.)
|
|||
|
||||
| Marathon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 2.12.2015 Репутация: нет Всего: нет |
math64, Builder
|
|||
|
||||
| Marathon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 2.12.2015 Репутация: нет Всего: нет |
Разобрался с вводом точки и координаты,но вот как быть с вершинами, смысл понимаю, прогон по циклу и все такое,но в форме... Понятно, что появляется "Введите 1 точку" -> запоминается, затем обнуление ->"Введите точку 2" и т.д. Но вот как дело до реализации,что-то не получается.
|
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
||||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 4 Всего: 72 |
Либо список, либо таблица.Внизу(или вверху) LineEdit и кнопка Add для ввода и добавления новой точки.
кнопка Delete для удаления текущей точки. кнопка Calc (или ещё как-то назови) - для вычисления выпуклый ли многоугольник кнопка Show - чтобы показать многоугольник |
|||
|
||||
| Marathon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 2.12.2015 Репутация: нет Всего: нет |
Как делать через Listbox не понял, да и мемо, что-то ткговато, раньше никогда с формами не работал, получается : пользователь вводит координаты в мемо, и они считываются затем strToInt или в цикл это надо?
|
|||
|
||||
| Marathon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 2.12.2015 Репутация: нет Всего: нет |
Да и в целом как считывать координаты из мемо, т.е нужно чтобы в строчке было два числа, через пробел
|
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 4 Всего: 72 |
|
|||
|
||||
| Marathon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 2.12.2015 Репутация: нет Всего: нет |
math64,Спасибо большое, но, честно, ничего не понимаю, и как соединить с своим кодом,. С вершинами и точкой все просто.
|
|||
|
||||
| Marathon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 2.12.2015 Репутация: нет Всего: нет |
math64, Начинает доходить
|
|||
|
||||
| Marathon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 2.12.2015 Репутация: нет Всего: нет |
Мне больше не понятно как связать форму эту и код.
|
|||
|
||||
| Marathon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 2.12.2015 Репутация: нет Всего: нет |
math64,Единственное, что я заменил в Вашем варианте Edit на MaskEdit, чтобы ограничить пользователя только цифрами. Но как их считать в программу выше вместо массива d [n]. Ну и очищение поля после ввода :
MaskEdit1-> Clear (); Не знаю, насколько это грамотно. Это сообщение отредактировал(а) Marathon - 17.12.2015, 15:16 |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
Никак. Для начала создайте в Builder GUI проект (а не консольный, как у вас в коде). Дальше добавьте на форму все органы управления, которые math64 перечислил, создайте для них события (в дезайнере) и скопируйте код от math64 в них. И только потом можете копировать куски своего кода в готовые обработчики. |
|||
|
||||
| Marathon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 2.12.2015 Репутация: нет Всего: нет |
Мне не понятно как работает CalcButton
|
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 4 Всего: 72 |
Ваш код (с соответствующими модификациями) вставляется или вызывается в CalcButtonClick().
По результату выполнения выполняете одно из действий: 1. Вызывается диалог с результатом и кнопкой OK. 2. Устанавлиается или сбрасывается CheckBox или результат вываоться на Label и устанавливается зелёный или красный фон. |
|||
|
||||
| Marathon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 2.12.2015 Репутация: нет Всего: нет |
Еще вопрос возник, ввести нужно количество вершин, в кнопке Add, как сделать счетчик, чтобы количество вводимых вершин было равно нажатию кнопки Add, или же как считать количество вершин из ЛистБокса
Добавлено через 5 минут и 27 секунд Лучше, наверное, чтобы определять количество вершин из листбокса Добавлено через 7 минут и 22 секунды Опять же, наверное, через количество клипов по Add... |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 4 Всего: 72 |
число кликов Add - число кликов Delete = число айтемов в ListBox = количество вершин
А можно добавить кпонпки Load и Save - тогда считать клики будет бессмысленно. |
|||
|
||||
| Marathon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 2.12.2015 Репутация: нет Всего: нет |
math64, это понятно, но как записать что число итемов равно, например, n (количеству вершин). Извините, если задаю глупые вопросы, я только учусь и мне важно понимать
|
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 4 Всего: 72 |
Заполнить список, имея полигон:
Очистить список и вызвать Add n раз. Создать полигон имея список: n определяется по числу итемов в списке, потом итемы перебираются в цикле - примерный код я уже давал. К сожалению, Билдер не поддерживает разделение Модель-Вид-Контроллер и создавать модель (в Вашем случае - полигон) из вид (ЛистБокс) и наоборот и поддерживать их синхронизацию приходится самостоятельно |
|||
|
||||
| Marathon |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 2.12.2015 Репутация: нет Всего: нет |
При написании строчки
Это сообщение отредактировал(а) Marathon - 18.12.2015, 10:26 |
||||
|
|||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 4 Всего: 72 |
опечатка: Strings. После ввода "ListBox1->Items->" Билдер выдаст подсказку, какие есть свойства/методы у Items.
У тебя уже есть свое объявление struct point {int x,int y}. Нужно просто point*poligon. Не нуджно тупо брать мой код 1:1 - он только иллюстрация, как делать. |
|||
|
||||
| Marathon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 2.12.2015 Репутация: нет Всего: нет |
Не показывает, после ввода листбокс1 не выводит подсказку, только ошибку
|
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 4 Всего: 72 |
Ошибку выдает при компиляции, а подсказку - при редактировании, после ввода "->". Если код копипастится, никакой подсказки не будет.
|
|||
|
||||
| Marathon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 2.12.2015 Репутация: нет Всего: нет |
Пишу все вручную, и подсказка на этом моменте не выскакивает
Добавлено через 9 минут и 38 секунд Хоть убей не понимаю, как он должен считывать и присваивать Х или У. Как это работает. Исправил MaskEdit, просто на Edit, вводить только числа , иначе выскакивает ошибка и пробел между точками. Как это все делать я понял |
|||
|
||||
| Marathon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 2.12.2015 Репутация: нет Всего: нет |
А если разделить на два поля Эдик Х и У может проще будет
|
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 4 Всего: 72 |
Можно. Но тогда вместо листбокс логичнее будет использовать стринггрид.
|
|||
|
||||
| Marathon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 2.12.2015 Репутация: нет Всего: нет |
math64, Организовывается это тоже через цикл, с отделением координаты Х от У?
|
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 4 Всего: 72 |
Конечно через цикл. Как использовать грид - смотри документацию и примеры, идущие с Билдером.
При использовании грид (не стринггрид) можно организовать разделение модель/вид: в GridDrawCell() рисовать данные из модели. Но число строк грида нужно устанавливать по числу вершин полигона. |
|||
|
||||
| Marathon |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 2.12.2015 Репутация: нет Всего: нет |
math64, в цикле, который ты присылал, первые строчки
Понятно что это количество строк, n - целое,
Т.е с этого момента начинается разделение на координаты, так а конвертация инт в поинт? И если не сложно, построчно описать что в них собственно происходит Это сообщение отредактировал(а) Marathon - 22.12.2015, 14:59 |
||||
|
|||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 4 Всего: 72 |
Это сообщение отредактировал(а) math64 - 23.12.2015, 13:41 |
|||
|
||||
| Marathon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 2.12.2015 Репутация: нет Всего: нет |
math64, И еще такой вопрос, а как задать, чтобы вводимое число в Edit = количеству заполняем строчек в Stringgrid
|
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 4 Всего: 72 |
А зачем? Если уж очень нужно - используй TSpinEdit. Вешай на OnChange обработчик, в котором изменяй число строк в гриде. Но обычно используются кнопки Add, Insert и Delete добавляющие и удаляющие строки по одной. Это сообщение отредактировал(а) math64 - 23.12.2015, 13:44 |
|||
|
||||
| WileyJohn |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 11.1.2016 Репутация: нет Всего: нет |
math64, Вот у меня почти аналогичная задача, но без всяких выпуклых - вогнутых, по примеру делал как тут,но выдавало некоторые ошибки, в итоге сделал так, но тоже кривенько,может подскажите что не так, пожалуйста
|
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |