![>](style_images/1/nav_m.gif)
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.217.81.135] |
![]() |
|
Сообщ.
#1
,
|
|
|
помогите плиз. Есть прямая, заданная двумя точками. надо повернуть точку вокруг этой прямой на заданный угол. Как это можно сделать побыстрее? Может у кого исходничек есть?
З.Ы. в поиске вроде ничего не нашел (может искал плохо?). |
Сообщ.
#2
,
|
|
|
имеется в виду трехмерное пространство?
|
Сообщ.
#3
,
|
|
|
да
|
Сообщ.
#4
,
|
|
|
Не очень понял вопрос - ты имеешь в виду, повернуть точку относительно другой точки? Как можно точку повернуть относительно прямой? Т.е. - какая у тебя задача?
|
Сообщ.
#5
,
|
|
|
последовательность аффинных преобразований:
1) переводящее данную прямую в прямую, совпадающую с осью, скажем, X - например, первую точку в (0,0,0), а вторую - в (1,0,0) 2) поворот вокруг оси X 3) обратное 1) произведение этих трех матриц вычисляешь и применяешь к координатам точки |
Сообщ.
#6
,
|
|
|
Да, все хорошо в этом алгоритме, единственная проблема - он довольно медленный. Спасибо и на этом.
![]() |
Сообщ.
#7
,
|
|
|
Цитата Shiru_Otaku, 17.03.03, 04:14:22 Не очень понял вопрос - ты имеешь в виду, повернуть точку относительно другой точки? Как можно точку повернуть относительно прямой? Т.е. - какая у тебя задача? Здесь вращение вокруг прямой ничем не отличается от вращения вокруг координатной оси за исключением того, что прямая не совпадает с осью. У меня появилась идея насчет использования опенгл. Он-то вроде умеет поворачивать вокруг заданных прямых. Всвязи с этим вопрос: а можно как-то у него отнять матрицу поворота, когда делаешь Glrotate?? |
Сообщ.
#8
,
|
|
|
Как-то можно. А вот как - не помню:( Ищи в инете, или в эхе fido7.ru.opengl (через http://groups.google.com, например) - я где-то точно видел...
|
Сообщ.
#9
,
|
|
|
Цитата PropellerMan, 16.03.03, 17:08:50 помогите плиз. Есть прямая, заданная двумя точками. надо повернуть точку вокруг этой прямой на заданный угол. Как это можно сделать побыстрее? Может у кого исходничек есть? З.Ы. в поиске вроде ничего не нашел (может искал плохо?). Берешь лист бумаги и карандаш. 1. По двум A и B точкам пишешь уравнение прямой. 2. Находишь координаты т. D проеции своей точки C на прямую. 3. Пишешь систему уравнений, что (AB,DC')=0 (DC,DC')=|DC|^2*cos(alpha) 4. решаешь ее, и находишь две пары координат своей новой точки. |
Сообщ.
#10
,
|
|
|
несколько замечаний:
1) пространство не 2-мерное, а 3-мерное. Честное слово, я себе мало представляю поворот точки вокруг прямой и все это на плоскости. 2) уравнений два, должно быть три. В голову мне сразу напросилось уравнение равенства длин DC'=DC. Вместе с предыдущими уравнениями - хорошая система, только как ее решать, точнее в общем виде имхо не получится. |
Сообщ.
#11
,
|
|
|
Напрашивается такое решение. Если есть проекция точки на прямую, то строишь эллипс в точке проекции и по нему поворачиваешь точку. Правда там углы нужно будет переводить из проекционнных в истиные.
|
Сообщ.
#12
,
|
|
|
Цитата kardinal, 24.03.03, 02:01:23 Не понял, а для чего эллипс - то. строишь эллипс в точке проекции и по нему поворачиваешь точку Достаточно найти проекцию-P' точки P на прямую (задача школьного курса геометрии 11 класса). Строим сферу с центром P' и радиусом P'P. Таким образом получаем точку P на поверхности сферы.... теперь гоняйте и вращайте эту точку по всей сфере.... ;D ;D ;D |
Сообщ.
#13
,
|
|
|
2GrAnd: я что-то все-таки недогоняю. Вот у меня есть уравнение сферы, есть точка и отрезок. Что делать дальше (всмысле, как гонять эту точку по сфере) не пойму.
|
Сообщ.
#14
,
|
|
|
Все, тему можно считать закрытой. Решение найдено.
Кому интересно, смотрите http://www.gamedev.ru/coding/10805.shtml Все считается быстро и без проблем. |