Форум » Для флейма » Круг из контролов » Ответить

Круг из контролов

fil: Понадобилось изобразить круг из контролов (напр.RADIOBUTTON) Типа циферблата. Т.е. нужен алгоритм вычисления координат точек располагающихся по окружности. Не делал ли кто ?

Ответов - 5

Haz: fil пишет: Не делал ли кто В школе в 7 классе делал. 360градусоа делишь на количество точек. Получаешь шаг угла. Потом через синус и косинус получаешь координаты от угла

Pasha: Поищите алгоритм Брезенхема Например: http://algolist.manual.ru/graphics/painting/circle.php PS Нашел у себя в архивах программку 1990 года, наверное как раз реализация этого алгоритма. Там всего 40 строк, только целочисленные операции. Давать не буду, поскольку сам не вспомню, как он работал. Да и не соберу уже: tc для dos не сохранился.

fil: Спасибо, Паша ! Я уже все сделал. Неохота было самому это описывать X:=X0+R*cos(0.017*N*(шаг)) Y:=Y0+R*sin(0.017*N*(шаг)) ну раз нет халявы...


ММК: Все упирается в постановку задачи :) В данном случае круг надо рисовать радиобутонами. Поэтому чем меньше круг тем меньше будет кнопок. Значит надо знать какова должна быть точность результата - т.е. сколько кнопок нужно ( можно ) влепить. На бумажке быстренько получаем координаты ( действительно школьный курс) и в соответствии с ними пишем пр-ку. x=r*Cos(f) y=r*Sin(f) и далее рисуем кнопки. Понятно ( еще раз ) , что точность выбора ограничивается кол-м кнопок. Если задача предусматривает произвольный выбор, то можно использовать стандартные команды FW. @ 40, 75 SAY oSay2 VAR cSay2 SIZE 80,18 PIXEL BORDER COLOR CLR_RED OF oWnd @ 65, 20 SELECTOR oSelec VAR nVar1 OF oWnd ; ORIGIN ANGLE 240 ; // en grados sexagésimales LAST ANGLE 120 ; // estando el origen cero en el punto superior RANGE 100, 200 ; MARKS 11; SIZE 200, 150 PIXEL ; ON CHANGE oSay2:SetText( STR( nVar ) ) В этом случае "бегунок" мышкой можем поставить в любое место и на выходе получить угол .

ММК: О! Пока писал Юра уже все и своял :)))) Ну, удалять не буду - как вариант пусть остается :)



полная версия страницы