![]()
Печатник lvl1
Typo
offline
Опыт:
4,057Активность: |
нахождение длины перпендикуляра
Математика огого как давно была. Ничего уже не понимаю.
Нужна функция нахождения длины перпендикуляра. Например три точки A, B, C, o. Все координаты (кроме o) известны. Нужно узнать длину отрезка oC если о лежит на отрезке AB, oC перпендикулярен AB, Аo и oB могут быть не равной длины.
Сам не пробывал. Но думал об этом. Хотел искать через 2 окружности. Зашёл в тупик. Ъз как найти точки пересечения окружностей.
итак..
Отредактировано Печатник lvl1, 15.04.2010 в 11:02. |
|
|
![]()
JaBeN_Симфер
offline
Опыт:
17,961Активность: |
строй прямоугольный треугольник АСо, по которому можно найти катет Со. у самого математика была очень давно, завтра если найду блокнотик с формулами, то выложу способ решения |
|
|
![]()
Windrunner
Верь мне!
offline
Опыт:
4,565Активность: |
Тебе ведь известна точка С? если да то строишь прямоугольный треугольник и находишь длинну СВ по формуле (xC-xB)^2 + (yC - yB) ^2 и из всего этого корень(не помню как находится) патом также находишь BO и по этой же формуле находишь CO только зачем тебе это? Хотя...В общем если тебе известны координаты O тогда делай проще (xC - xO) ^2 + (yC - yO) ^2 и корень из всего етого. ^2 это значит в квадрате=) |
|
|
![]()
McKenzza
Qt
offline
Опыт:
3,854Активность: |
можно найти координаты центра АВ (если конечно АО=ОВ), координаты О((Xb+Xa)/2; (Yb+Ya)/2) Xo=(Xb+Xa)/2 Yo=(Yb-Ya)/2 ну и собственно: OC = sqrt((Xc-Xo)(Xc-Xo)+(Yc-Yo)(Yc-Yo)) Отредактировано F1shkA, 15.04.2010 в 07:41. |
|
|
![]()
krosaf4eg
offline
Опыт:
1,859Активность: |
СО=АС*sin а где а - угол между АС и АВ еще через уравнения прямых можно только точно не помню как |
|
|
![]()
Печатник lvl1
Typo
offline
Опыт:
4,057Активность: |
Обновил первый пост.
Как находить расстояние между точками я знаю. Нужно найти координаты oC. krosaf4eg:
Как это понимать? Длину АС на синус угла между АС и АВ? |
|
|
![]()
krosaf4eg
offline
Опыт:
1,859Активность: |
Да. зная длину, можно найти координаты о через полярки, однако сложновато получается, может кто-нибудь подскажет способ менее трудоемкий (давно эти темы были, на первом курсе :) ) |
|
|
![]()
McKenzza
Qt
offline
Опыт:
3,854Активность: |
хз.. можно попробовать через площадь..
...........|xa ya 1| S(abc)=|xb yb 1|=1/2[xa(yb-yc)-xb(ya-yb)+xc(ya-yc)] ...........|xc yc 1| потом таким же образом найти сумму (ACO) и (COB), т.е. ...........|xa ya 1| S(aco)=|xc yc 1|=... детерминант короче посчитать тут надо (выразить) ...........|xo yo 1| ...........|xb yb 1| S(cob)=|xc yc 1|=... ...........|xo yo 1| затем приравнять и выразить xo и yo.. п.с.у меня чего-то не вышло.. |
|
|
![]()
Windrunner
Верь мне!
offline
Опыт:
4,565Активность: |
А мой чем не хорош то?=) |
|
|
![]()
Печатник lvl1
Typo
offline
Опыт:
4,057Активность: |
F1shkA, Воще обракадабры какието)
Windrunner, как я найду точку О ты не описал. |
|
|
![]()
JimALIEN
вдупляет sc2 editor
offline
Опыт:
6,976Активность: |
ну через площадь вполне можно:
S=(AB*CO)/2=sqr(p*(p-AB)*(p-BC)*(p-AC)) слева одна формула получения площади (половина произведния стороны на высоту, проведенную к ней), справа формула площади треугольника через полупериметр, приравнивем и получаем: CO = (2*sqr(p*(p-AB)*(p-BC)*(p-AC)))/AB Точку О этот способ вроде не даст, но длину высоты найдеш) |
|
|
![]()
Печатник lvl1
Typo
offline
Опыт:
4,057Активность: |
JimALIEN:
Гда взять р? (AB+BC+AC)/2? Вместо AB например его длину подставлять? |
|
|
![]()
JimALIEN
вдупляет sc2 editor
offline
Опыт:
6,976Активность: |
ну да
|
|
|
![]()
Печатник lvl1
Typo
offline
Опыт:
4,057Активность: |
Спасибо буду тестить)
|
|
|
![]()
McKenzza
Qt
offline
Опыт:
3,854Активность: |
Это матрицы :D >_< |
|
|
![]()
Печатник lvl1
Typo
offline
Опыт:
4,057Активность: |
Ну и?
Если искать этим методом выйдет меньше действий? |
|
|
![]()
McKenzza
Qt
offline
Опыт:
3,854Активность: |
Печатник lvl1, думаю, что нет)) просто это уже окольными путями я пошел, т.к. другого метода не нашел.. О.о Хотя были идеи через длины.
F1shkA добавил:
этот получился? |
|
|
![]()
JimALIEN
вдупляет sc2 editor
offline
Опыт:
6,976Активность: |
там вроде над еще модулей добавить, т.к. может получица что под корнем будет отрицательное число, т.е.:
Код:
аддед: фигню написал, не обращайте внимания) Отредактировано JimALIEN, 15.04.2010 в 19:12. |
|
|
![]()
silumin
offline
Опыт:
11,153Активность: |
Печатник lvl1,
(угол)САо = Atan2(Cy-Ay,Cx-Ax) - Atan2(By-Ay,Bx-Ax) (отрезок)AC = DistanceBetweenPoints(A,C) (отрезок)Co = AC*Sin(CAo) //<--- Нужный отрезок (угол)ACo = 1.5708 - CAo (угол)х = Atan2(Ay-Cy,Ax-Cx) + ACo //<--- Нужный угол (в радианах) (угол)х1 = х*57.29582 //<--- Нужный угол (в градусах) Точку (о) нужно будет отложить полярными координатами от точки (С), используя длинну отрезка Со и угол х1 (ну или угол х, если угол будешь считать в радианах). При редактировании учти, что все углы в радианах!!! Отредактировано silumin, 16.04.2010 в 03:17. |
|
|
![]()
DioD
offline
Опыт:
45,184Активность: |
через полярные координаты это делается даже на гуи... |
|
|