| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Для новичков > Как заставить выводить генерации в канвас? |
| Автор: Fringe 13.5.2010, 20:12 | ||||
| Условия задачи таковы:Кольцо шириною 30, внешняя окружность которого проходит как минимум через три точки Т, содержащее максимум точек ТТ. Господа, помогите пожалуйста, кто чем может, я не могу понять как заставить выводить все генерации графически, программа выводит самую оптимальную и все тут. Как заставить выводить ее все вариации и где больше всего точек лежит в кольце то и окрашивать в иной цвет + выводить информацию об этом. Код обработчика:
Код графики:
Заранее всем спасибо за советы! |
| Автор: Fringe 13.5.2010, 21:36 |
| DarkProg, а как сделать чтобы она все выводила? с цветом все понял, а что за классы такие, можно по подробнее. |
| Автор: DarkProg 15.5.2010, 16:52 |
Т.Е. все выводила???? Вы канвас сначала сбрасываете а потом заново рисуете??? Какой у вас опыт программирования???(если вы начинающий, ну т.е. совсем недавно-меньше полу года, то пока я не советую изучать и сильно вдаваться, лучше просто почитывайте книги по остальному, по компонентам и т.д.) |
| Автор: Fringe 15.5.2010, 18:31 |
| Ну смотрите, например у меня по координатам получается два кольца, которые построены по трем точкам. В 1 находится больше точек, чем во 2. И на канвас должны выводится оба кольца и то кольцо в котором больше точек, удовлетворяющих условиям, должно окрашиваться в другой цвет. Опыт с делфи только полгода :( |
| Автор: DarkProg 17.5.2010, 07:41 |
| Прикрепите весь проект, потому что я не пойму как у вас вообще кольца рисуются, может я смогу тогда понять.... |
| Автор: Fringe 17.5.2010, 08:18 |
| Вот. Тут лежит все. Работаю в Delphi 2010 |
| Автор: DarkProg 18.5.2010, 15:21 | ||||||
| Поглядел, наконец-таки(едит стрингридом поуху того к то умудрился в два дня запихать такое число лабораторок и практик) Обратите внимание на вот этот кусочек кода
Не надо делать перезаписи.(расскажу ка я вам про записи) Итак записи это похоже как тип переменной Объявляется так (сразу Var Form1:TForm1)
Теперь вам нужно объявить массив всех возможных вариантов ваших колец(обычно мне такие структуры нужны в разных частях программы поэтому объявляю их как глобальные переменные)
В результате будет получен набор данных, со всеми кольцами и всеми точками содержащиеся в этом кольце, после чего в дополнительном цикле вы можете их множество раз рисовать, и можете сделать возможность выбора кольца которое будет в данный момент отрисовано. Если что не понятно спрашивайте P.S. в коде могут быть мелкие ошибки, т.к. писал от руки прям в браузере и не проверял |
| Автор: Fringe 18.5.2010, 17:35 | ||
DarkProg, так... более менее понял что да как, но куда что переписать не понял(с переменными знаю что и куда). Особенно это:
|
| Автор: DarkProg 18.5.2010, 18:01 |
| Каждый раз ты перезаписываешь массив с координатами в результате после выполнения программы возможно отрисовать только то кольцо в которое попало больше всего точек. Теперь если использовать записи, можно запомнить все расчитанные кольца со всеми точками и соответственно их можно рисовать в любом произвольном порядке(хоть список где будет выбираться какую именно комбинацию рисовать) Поясняю выделенный кусок. В строке объявления переменной нужно объявить массив записей TAllCircles(несколько не корректно назвал, ну да бог с ним), массив нужен для того чтобы запомнить все т.к. одна переменная может запомнить только информацию об одном кольце с точками попадающими в него. Дальше, я не писал, так как посчитал не нужным, нужно определить размер массива(т.к. заранее размер неизветен будем выделять по одному в 8-ой строке написано как это делается) Потом обращаемся к последнему элементу и добавдляем все данные в запись, и массивом загоняем те точки которые попали в кольцо. Я специально задал внутри ещё массив точек попавших в кольцо, чтобы можно было потом их раскрашивать другим цветом. Т.е. увеличить длину массива AllCircles надо в тот момент как только определяется что через три точки можно провести окружность. Я надеюсь так понятнее. Кстати по поводу кода - а не проще ли данные считывать из файла и сразу их кидать и в stringgrid и в те массивы где оно всё хранится при расчётах??? - подумайте над этим. P.S. И ещё я думаю вам обязательно надо купить книгу по Delphi(набираете по отзывам в нете штук 10 вариантов, потом идёте в магазин и выбираете ту в которой для вас понятно написано) - книг у самого не мало и поверьте они весьма полезны |
| Автор: Fringe 18.5.2010, 18:14 |
| DarkProg, а можете в код это мой все включить? Я не могу понять что-то :( Скорее всего инженерная графика влияет так негативно :( |
| Автор: DarkProg 18.5.2010, 22:11 | ||
В ближайший день-два наврядли, а то и вообще не смогу нормально сесть... У меня тут такая вещь типа учёбы, я говорю типа, потому что мне дают задания, лабы и читают лекции, при этом голова не знает что делают руки, посему лопачу дочёрта материала сам и времени пипец не хватает Да чёрт его знает что влияет негативно - может быть просто качество образования.... Вообще совет насчёт книг весьма актуален - попробуйте, может сами дойдёте, пока я буду тут со своимим проблемами разбираться... |