forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Математика (http://forum.boolean.name/forumdisplay.php?f=85)
-   -   Хлопушка(геометрия) (http://forum.boolean.name/showthread.php?t=17728)

Devilox 07.01.2013 21:10

Хлопушка(геометрия)
 
http://forum.boolean.name/showthread.php?t=17727
Продублирую данную тему в этом разделе, так как, видимо, в разделе Blitz3D я уже ничего не добьюсь. Повторюсь: у меня есть хлопушка, наклонённая под некоторым углом по осям X и Z, необходимо, чтобы она стреляла туда, куда направлена. Кто разбирается, подскажите, правильно ли я расчитывал, чтобы уже точно определить местонахождение проблемы: в моих расчётах или в Blitz-е.
Исходник приклеивать, думаю, нет смысла, так как спрашиваю исключительно геометрию.



OD - вектор скорости и, соответственно, направление хлопушки
AC = OB - проекции вектора OD на ось Z
OA = BC - проекции вектора OD на ось X
DC - проекция вектора OD на ось Y
∠DBC соответствует повороту хлопушки вокруг оси Z
∠DAC соответствует повороту хлопушки вокруг оси X

Как я решал(подскажите, что не так, потому что я, вероятно, где-то ошибся):

AC ⊥ OA, AC - проекция AD ⇒ AD ⊥ OA(по теореме о 3-х перпендикулярах)
BC ⊥ OB, BC - проекция BD ⇒ BD ⊥ OB(по теореме о 3-х перпендикулярах)

AD² = AC² + CD²
OD² = AD² + OA²

1) OD² = AC² + CD² + OA²

Получилось что-то вроде всем известного уравнения длины вектора в пространстве, заданной проекциями:

v² = x² + y² + z²

Далее:

AD² = AC² + CD²
AC = AD * Cos∠DAC

2) AC² = (AC² + CD²) * Cos²∠DAC

Аналогично:

BD² = BC² + CD²
BC = BD * Cos∠DBC

3) BC² = (BC² + CD²) * Cos²∠DBC

Вот мы получили систему уравнений, выделенных красным цветом. Далее следует очень нудная подстановка, в которой явно никто не захочет разбираться. Вопрос, повторяюсь, состоит в том, правильно ли я выводил формулы, и эти ли формулы необходимы для описания выстрела хлопушки? Просто пока ничего нормально не работает... Если нужно, я всё-таки могу написать, как вычислять отсюда проекции...

RegIon 08.01.2013 00:04

Ответ: Хлопушка(геометрия)
 
point = CreatePivot()
ball = CreateSphere(32,point)
RotateEntity(point,0,34,21)

U#=50
g#=10
a = 30
t#=0
repiat
t=t+.01

Y# = U*sin(a) - g*t*t/2;
Z# = U*cos(a);
PositionEntity(ball,0,Y#,Z#)
;****

Devilox 08.01.2013 09:00

Ответ: Хлопушка(геометрия)
 
Здесь, как я понял, шар будет двигаться по локальным координатам пивота. Я пытаюсь сделать движение исключительно в глобальных.
Поэтому я и решил написать именно в этот раздел, чтобы не было привязки к конкретному языку программирования.


Часовой пояс GMT +4, время: 13:14.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot