![]() |
|
||||||||||
|
|||||
|
Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
|
Я не понял, почему за основу взяты координаты точки Д?
|
|
|||||
|
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
Мне кажется, автор сам всех запутал, обозначив задачу как труднорешаемую.
Треугольник AED - прямоугольный, стороны AE и AD известны. Что еще нужно? |
|
|||||
|
Регистрация: Sep 2005
Адрес: Минск
Сообщений: 389
|
Цитата:
В вашем случае нахождение угла w с рис. 2 сводится к нахождению угла а с рис. 1. А как я и говорил выше - угол a не работает, что и так ясно из рисунка. Добавлено через 2 минуты Точнее угол а работает хорошо, только на больших расстояниях между целью и пушкой. Как только цель приближается - угол начинает хорошо работать на a/2. |
|
|||||
|
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
Цитата:
![]() На первом рисунке угол w ищется в другом треугольнике. Если точно - BCE, а я предлагаю брать треугольник EAD. Вы зря убрали точку D со второго рисунка, из за этого пропал очевидный факт, что треугольник EAD прямоугольный и с двумя известными сторонами. |
|
|||||
|
[+1 05.11.12]
Регистрация: Feb 2011
Сообщений: 431
|
|
|
|||||
|
Регистрация: Feb 2013
Сообщений: 176
|
+1
все конструкция вращается вокруг точки A, тогда и в расчетах нужно брать плечо AD,а не AC. |
|
|||||
public class Main extends Sprite { private var gun:Sprite; private var target:Sprite; private var ab:Number = 50; private var ad:Number = 80; public function Main():void { gun = new Sprite(); target = new Sprite; target.graphics.beginFill(0x80FF80); target.graphics.drawCircle(0, 0, 10); gun.graphics.lineStyle(10, 0xFF8080); gun.graphics.lineTo(ad, 0); gun.graphics.lineTo(ad, -ab); gun.graphics.lineStyle(0, 0xC0C0C0); gun.graphics.lineTo(ad, -500); gun.x = 200; gun.y = 200; addChild(target); addChild(gun); addEventListener(Event.ENTER_FRAME, enterFrame); } private function enterFrame(e:Event):void { target.x = mouseX; target.y = mouseY; var tP:Point = new Point(target.x, target.y); var gP:Point = new Point(gun.x, gun.y); // расстояние var dist:Number = Point.distance(tP, gP); // направление var dir:Number = Math.atan2(tP.y - gP.y, tP.x - gP.x); // поправка var w:Number = Math.asin(ad / dist); gun.rotation = 180 / Math.PI * (dir - w) + 90; } } |
|
|||||
|
Тут же все просто, переводим координаты точки С в глобальные и по ним считаем угол между Е и С.
|
|
|||||
|
>> По идее, вы можете переводить точку D, в глобальные координаты и уже их использовать при расчёте поворота пушки
>> Тут же все просто, переводим координаты точки С в глобальные и по ним считаем угол между Е и С. ну да, по точке D или C в глобальных координатах посчитать нужный угол не сложно, только для этого мувик уже должен быть повернут на этот угол ![]() |
![]() |
![]() |
Часовой пояс GMT +4, время: 10:44. |
|
|
« Предыдущая тема | Следующая тема » |
|
|