Задача на координатную плоскость.

Тема в разделе "WASM.A&O", создана пользователем dgs, 16 июл 2008.

  1. dgs

    dgs New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2008
    Сообщения:
    434
    Привет всем. Суть задачи состоит в том, что надо придумать алгоритм и воплотить его на Асме:)

    Задача:
    Вопрос:
    Удачи.

    ЗЫ. Если честно сам не смог решить пока не показали как надо делать.
     
  2. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    Нипонятноо...
     
  3. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    dgs
    А в чем собственно задача? Зная центр и радиус (без дополнительного знания координат еще какой-то точки), можно:
    1. Построить окружность геометрически (а значит множество всех точек, лежащих на ней)
    2. Написать простую формулу, описывающую множество всех точек, лежащих на окружности:
    (x - x0)^2 + (y - y0)^2 = R^2.
     
  4. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    видимо необходимо искать точки относительно известной по угловой координате, считая что 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, либо с целыми, тогда синусы и косинусы - по таблицам.
     
  5. Velheart

    Velheart New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    526
    Так это про параметрическое задание окружности с помощью теоремы Виета: если радиус R, центр (a,b), точка (x0,y0), то любая другая точка имеет координаты вида (x,y), где x=( 2*a + 2*k*(k*x0 + b + y0) )/(1 + k^2), а y=k*(x-x0)+y0, я может описался-осчитался где-нибудь только..
     
  6. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Velheart
    Странные какие-то формулы... Радиус отсутствует. Это к вопросу об избыточности входных данных... Да и вообще уши растут из угла, тангенс которго равен k.
     
  7. Velheart

    Velheart New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    526
    Радиус не нужен, т.к. по (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 "
     
  8. dgs

    dgs New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2008
    Сообщения:
    434
    Извиняюсь ошибся:
    Как найти координаты любой точки?

    И даю подсказку: самый простой вариант лежит через векторы...
     
  9. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    Что значит "найти координаты любой точки"? Должны же быть какието входные данные, чтобы различать одну любую точку от любой другой точки %)
     
  10. DEEP

    DEEP Андрей

    Публикаций:
    0
    Регистрация:
    27 апр 2008
    Сообщения:
    491
    Адрес:
    г. Владимир
    Раз не указано, какую, значит можно выбрать любую, какую заблагорассудится! Вот алгос нахождения:

    1) Взять O.x и прибавить к нему R
    2) Взять O.y
    3) Вывести полученное на экран

    Спорим, что алгоритм оптимален? %)
     
  11. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    DEEP
    Более оптимальный алгос: взять координаты точки А и вывести на экран.
    Бред :derisive:
     
  12. DEEP

    DEEP Андрей

    Публикаций:
    0
    Регистрация:
    27 апр 2008
    Сообщения:
    491
    Адрес:
    г. Владимир
    crypto
    Э, нет, это уже не совсем "любая"! Она целиком дана в условии ;)

    Короче, бред. Согласен)
     
  13. dgs

    dgs New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2008
    Сообщения:
    434
    Смотрим рисунок и понимаем принцип задачи, координаты центра окружности могут быть любыми и этой точки которая лежит на окружности! Я специально не дал точных значений дабы:

    Т.е. нам заранее не известно координаты какой именно точки нам надо найти. :)
     
  14. dgs

    dgs New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2008
    Сообщения:
    434
    DEEP по твоему алгу мы можем найти только одну точку. :)
     
  15. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    омг бмп
    Чтото я так и не понял чего хочет автор оО

    Какбэ постановка задачи обычно звучит так: есть некоторый алгоритм, принимающий входные данные и выдающий результат, и надо найти алгоритм. Что здесь входные данные?
     
  16. dgs

    dgs New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2008
    Сообщения:
    434
    Хе хе, входные данные:

    координаты точки лежащей на окружности + номер точки по часовой стрелки которую нам надо найти при условии что точка имеет размер один пиксел+координаты центра окружности

    Результат: указатель на POINT структуру точки которую нам надо найти.
     
  17. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    dgs
    Бред какой-то.
     
  18. mc black

    mc black Member

    Публикаций:
    0
    Регистрация:
    19 янв 2005
    Сообщения:
    213
    Адрес:
    Russia, N.Novgorod
    фигня какая-то. тригонометрия, школа, 8-й что-ли класс.. ))
     
  19. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    Кажется автору надо построить окружность по точкам в цикле начиная с заданной точки и имея центр окружности.
     
  20. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    Значит имея центр [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 точек.