Найти точку пересечения двух перпендикулярных прямых

Тема в разделе "WASM.HEAP", создана пользователем FFF0, 17 дек 2011.

  1. FFF0

    FFF0 New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2011
    Сообщения:
    18
    [​IMG]
    Известны координаты точек Pt1, Pt2, Obj2 и радиус окружности. Точка Obj2 может перемещаться как угодно внутри окружности(но ее координаты всегда будут известны), точка Obj1 может перемещаться только по прямой Pt1Pt2. Нужно найти такие координаты точки Obj1, чтобы прямая Оbj1Obj2 была перпендикулярна прямой Pt1Pt2.
     
  2. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Проще простого. Нужно найти длину отрезка Pt2:Obj1, которая является длиной проекции отрезка Pt2:Obj2 на прямую Pt2:Pt1. Эта длина есть скалярное произведение вектора Pt2:Obj2 на единичный вектор прямой Pt2:Pt1. Далее умножаем полученную длину на единичный вектор прямой Pt2:Pt1, прибавляем координату Pt2 и вуаля.
     
  3. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    FFF0
    Сначала читаешь про нормирование и скалярное произведение векторов, а потом вычисляешь:
    Obj1=Pt2+(Pt1-Pt2)/|Pt1-Pt2|*(Obj2-Pt2)*(Pt1-Pt2)/|Pt1-Pt2|
     
  4. FFF0

    FFF0 New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2011
    Сообщения:
    18
    Ладно. Пойду разбираться с этим. Надеюсь это есть правильное решение. Спасибо.
     
  5. FFF0

    FFF0 New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2011
    Сообщения:
    18
    Стоп, люди, это что? Я же про координаты говорил, а координаты это два значения: Х и Y, разве не так?
     
  6. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    FFF0
    Изучать векторную алгебру, шагом марш.
     
  7. FFF0

    FFF0 New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2011
    Сообщения:
    18
    Непременно. Но задача не станет ждать пока я изучу весь этот раздел математики. Мне было бы намного легче, если вы сказали что мы находим вышеприведенной формулой.
     
  8. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Боюсь без знания векторной алгебры здесь никак. А находим точку Obj1, сюрпрайз. ^)
     
  9. Dmitry_Milk

    Dmitry_Milk Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    540
    Кстати, а причем тут окружность-то? точки Pt1 и Pt2 задают прямую, Obj2 вне этой прямой задает точку, через которую надо опустить перпендикуляр. Кто так мозги пудрит?

    Всю математику работы с векторами учить не надо, надо учить то, что в 7 или 8 классе проходят на алгебре, то есть, сложение/вычитание векторов и скалярное произведение векторов (которое в случае перпендикулярности векторов равно нулю).
     
  10. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    FFF0
    элементарная геометрия - тригонометрия за 11 класс - первый курс универа

    1)находишь уравнение прямой по двум точкам от пт1 и пт2
    2)из уравнения 1)находишь вектор нормали (тупо перегруппировкой цифр и букв при переходе от одного канонического вида уравнения прямой к другому)
    3)используешь его как направляющий вектор и пишешь уравнение прямой через о2 и этот вектор

    решаешь систему уравнений из 1 и 3 получаешь координаты своей точки


    это смысл всех тех манипуляций про которые тебе говорили бустер и блэкмирорр
     
  11. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    что то я гляжу у нас в хипе сезон математики на васм ру :)
     
  12. FFF0

    FFF0 New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2011
    Сообщения:
    18
    Запутался на этом пункте. Рассмотрим на примере конкретных чисел: пусть пт1(0,0), пт2(10,10) и о2(10,5).Получаем уравнение прямой по двум точкам: x/1 = y/1. Отсюда вектор (1,-1) является вектором нормали. А вот как получить уравнение прямой через вектор и точку я никак понять не могу.
     
  13. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    FFF0
    Не нужно никакого уравнения. Для подобных задач прямую лучше задавать в виде произвольной начальной точки Origin (= Pt1 или Pt2) и единичного вектора направления Direction = те же (X,Y), где X = cos угла наклона, Y = sin. Тогда твоя задачка элементароно решается через скалярное произведение, как сказал Booster в #2. Т.е. примерно так:
     
  14. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    точка - (xa,ya) вектор - (xv,yv) уравнение прямой - xl=xa+k*xv , yl=ya+k*yv или векторно L=A+k*V
     
  15. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    FFF0
    нагуглите три канонических уравнения прямой
    1) по двум точкам
    2) по точке и вектору нормали
    3) по точке и направляющему вектору (он ей коллинеарен (параллелен с точностью до знака))

    весь фокус в том, что вектор нормали для прямой будет направляющим для прямой ей перпендикулярной

    это наглядное решение - его конечно можно оптимизировать и тогда уравнения не нужны - будете орудовать матрицами и векторами из координат точек
     
  16. s_d_f

    s_d_f New Member

    Публикаций:
    0
    Регистрация:
    15 май 2008
    Сообщения:
    342
    Уравнение окружности
    x2+y2=R2

    R - радиус окружности, а в этом конкретном случае расстояние от центра [x0;y0] до Obj2, которое по условию переменное.
    x - координата для Obj1.
    y - расстояние от Obj2 до Obj1.
     
  17. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    По-моему, если нарыть хороший справочник по высшей математике, там уже должно быть и само решение.
    Например, я долго не понимал, как оптимально решить поворот одной точки вокруг другой. А в справочнике это было описано. А недавно снова пришлось решать подобную задачу, так вообще обошёлся без справочника: вывел уравнения через полярные координаты за пару минут.
     
  18. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    SadKo
    Осильте уже линейную алгебру и матрицы.
     
  19. FFF0

    FFF0 New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2011
    Сообщения:
    18
    leo, что-то с вашими формулами не то. Задал Pt1(0,0), Pt2(10,10), Obj2(3,1). Очевидно координаты Obj1 должны были быть (1,1). Но следующий кодес выдает (2,2):
    Код (Text):
    1. struct point
    2. {
    3.     float x,y;
    4. };
    5. int main()
    6. {
    7.     point Org,Pt1,Pt2,Obj1,Obj2,Dir;
    8.  
    9.     Pt1.x = 0.0f;
    10.     Pt1.y = 0.0f;
    11.  
    12.     Pt2.x = 10.0f;
    13.     Pt2.y = 10.0f;
    14.  
    15.     Obj2.x = 3.0f;
    16.     Obj2.y = 1.0f;
    17.  
    18.     Org = Pt1;
    19.     float L = sqrt((Pt2.x-Pt1.x)*(Pt2.x-Pt1.x)+(Pt2.y-Pt1.y)*(Pt2.y-Pt1.y)); //расстояние между Pt1 и Pt2
    20.  
    21.     Dir.x = (Pt2.x-Pt1.x)/L; Dir.y = (Pt2.y-Pt1.y)/L; //ед.вектор прямой
    22.  
    23.     L = Dir.x*(Obj2.x-Org.x)+Dir.y*(Obj2.y-Org.y); //скаляр.произв. = длине от Org до Obj1
    24.  
    25.  
    26.     Obj1.x = Org.x+L*Dir.x;
    27.     Obj1.y = Org.y+L*Dir.y;
    28.     printf("%f\n",Obj1.x);
    29.     printf("%f",Obj1.y);
    30. }
     
  20. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    FFF0
    (2, 2) Нарисуйте картинку что-ли.