Привет всем. Суть задачи состоит в том, что надо придумать алгоритм и воплотить его на Асме Задача: Вопрос: Удачи. ЗЫ. Если честно сам не смог решить пока не показали как надо делать.
dgs А в чем собственно задача? Зная центр и радиус (без дополнительного знания координат еще какой-то точки), можно: 1. Построить окружность геометрически (а значит множество всех точек, лежащих на ней) 2. Написать простую формулу, описывающую множество всех точек, лежащих на окружности: (x - x0)^2 + (y - y0)^2 = R^2.
видимо необходимо искать точки относительно известной по угловой координате, считая что phi(x1,y1)=0 phi0=atan((y1-y0)/(x1-x0)) x(phi)=x0+R*cos(phi+phi0) y(phi)=y0+R*sin(phi+phi0) ЗЫ: а для воплощения на асме надо задать точность, т.к. можно работать с дробными числами, тогда все будет вычисляться на FPU, либо с целыми, тогда синусы и косинусы - по таблицам.
Так это про параметрическое задание окружности с помощью теоремы Виета: если радиус R, центр (a,b), точка (x0,y0), то любая другая точка имеет координаты вида (x,y), где x=( 2*a + 2*k*(k*x0 + b + y0) )/(1 + k^2), а y=k*(x-x0)+y0, я может описался-осчитался где-нибудь только..
Velheart Странные какие-то формулы... Радиус отсутствует. Это к вопросу об избыточности входных данных... Да и вообще уши растут из угла, тангенс которго равен k.
Радиус не нужен, т.к. по (x0,y0) и (a,b) его можно найти, а формулы получились так: ур-е любой прямой через (x0,y0): y-y0=k*(x-x0), если к!=0, прямая пересечет окружность еще в одной точке, чтобы найти ее координаты решим систему: {y-y0=k*(x-x0) {R^2=(x-a)^2+(y-b)^2 подставив значение y из первого ур-я, получим квадратное, относительно x, один корень -- x0, значит второй по теореме Виета можно найти как "минус коэффициент при x, деленный на коэф при x^2 минус x0 "
Извиняюсь ошибся: Как найти координаты любой точки? И даю подсказку: самый простой вариант лежит через векторы...
Что значит "найти координаты любой точки"? Должны же быть какието входные данные, чтобы различать одну любую точку от любой другой точки %)
Раз не указано, какую, значит можно выбрать любую, какую заблагорассудится! Вот алгос нахождения: 1) Взять O.x и прибавить к нему R 2) Взять O.y 3) Вывести полученное на экран Спорим, что алгоритм оптимален? %)
Смотрим рисунок и понимаем принцип задачи, координаты центра окружности могут быть любыми и этой точки которая лежит на окружности! Я специально не дал точных значений дабы: Т.е. нам заранее не известно координаты какой именно точки нам надо найти.
омг бмп Чтото я так и не понял чего хочет автор оО Какбэ постановка задачи обычно звучит так: есть некоторый алгоритм, принимающий входные данные и выдающий результат, и надо найти алгоритм. Что здесь входные данные?
Хе хе, входные данные: координаты точки лежащей на окружности + номер точки по часовой стрелки которую нам надо найти при условии что точка имеет размер один пиксел+координаты центра окружности Результат: указатель на POINT структуру точки которую нам надо найти.
Кажется автору надо построить окружность по точкам в цикле начиная с заданной точки и имея центр окружности.
Значит имея центр [x0,y0] и точку [x1,y1] получаем радиус, затем считаем что центр в начале координат, а ко всем рассчитанным точкам добавляем [x0,y0]. Будем последовательно вычислять координаты точек, расположенных рядом с текущей, закрашивая все пикселы, которые пересекает окружность. Точки вычисляем пока координаты очередного пиксела [xn,yn] не совпадут с [x1,y1]. Так как центры пикселов как правило не лежат на окружности, будем считать что точка (x1,y1) лежит на окружности, а координаты остальных пикселов получаются отбрасыванием дробной части фактической координаты точки на окружности, обозначим [x,y] - координаты пиксела, (x,y) - координаты точки. Для того чтобы закрасить все точки, надо выбрать шаг поменьше, в то же время, при слишком малом шаге будет большое число повторов. Вариант1: Phi = arctan(y1/x1) dPhi = arcsin(1/R) в цикле: Phi = Phi + dPhi x=R*cos(Phi); y=R*sin(Phi); Всего будет вычислено 2*pi/arcsin(1/R) точек, это примерно 6.3*R. Можно используя симметрию вычислять сразу 8 точек.