Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как правильно расчитать угол по координатам? (http://www.flasher.ru/forum/showthread.php?t=206155)

Dip52 16.01.2014 00:07

Как правильно расчитать угол по координатам?
 
Здравствуйте.
Я пытаюсь сделать так: добавляю определённое количество объектов на сцену, определяю их угол, относительно определённой точки, определяю расстояние от определённого объекта до центра, после всего этого я присваиваю новые координаты каждому определённому объекту по такой системе: "определённыйОбъект.x = центр.x + Math.cos(угол) * расстояниеОтОбъектаДоТочки,
определённыйОбъект.y = центр.y + Math.sin(угол) * расстояниеОтОбъектаДоТочки". В итоге некоторые объекты куда-то уезжают, а другие остаются...

А цель вообще такая: добавить объекты через косинусы\синусы, определяя по изначальным координатам их угол, туда, где они изначально были.

Что я делаю неправильно?

Akopalipsis 16.01.2014 00:24

А что Вы в итоге хотите? я просто не понял цель:( Вам нужно просто точку под углом или повернуть объект на угол относительно центра к другой точки?

Dip52 16.01.2014 00:30

Пока я хочу, просто добавить объект туда же, где он был изначально, но только с помощью косинусов\синусов. После этого я попытаюсь изменять угол, чтобы создать эффект вращения объекта вокруг центра.

Akopalipsis 16.01.2014 00:37

Вопрос о вращении во круг центра - на три темы ниже. А какие значения есть для возврата?

Dip52 16.01.2014 00:39

Так я могу сделать так, чтобы они вращались (у меня вокруг определенных объектов вращаются звезды).
Есть радиус, угол. Хотя, если честно, я не понимаю, что обозначает "возврат".

Akopalipsis 16.01.2014 00:41

Цитата:

добавить объект туда же, где он был изначально
Это же означает возвратить? Получается что объект был в точки А, потом оказался в В и его нужно вернуть в А.
А какие для этого есть значения.

Dip52 16.01.2014 00:41

Код AS3:

package classes.orders
{
        import flash.display.MovieClip;
        import classes.init.Settings;
        import flash.geom.Point;
        import flash.events.Event;
 
        public class MotionStargazers extends MovieClip
        {
                public function MotionStargazers()
                {
                        this.addEventListener(Event.ENTER_FRAME,motion);
                }
                private function motion(event:Event):void
                {
                        const STARGAZERS:Array = Settings.STARGAZERS;                                //Ссылка на массив звездочётов:
                        const LENGTHSTARGAZERS:int = Settings.STARGAZERS.length;        //Длина массива звездочётов:
                        const CENTER:Point = new Point(Settings.mainContainer.stageWidth/2,Settings.mainContainer.stageHeight/2);
                        for(var stargazer:int = 0; stargazer < LENGTHSTARGAZERS; stargazer++)
                        {
                                const STARGAZER:MovieClip = STARGAZERS[stargazer][0];                                                //Ссылка на звездочёта:
                                const STARGAZERPOINT:Point = new Point(STARGAZER.x,STARGAZER.x);                        //Точка звездочёта:
                                const RADIUS:Number = Point.distance(STARGAZERPOINT,CENTER);                                //Радиус:
                                const ANGLE:Number = Math.atan2(STARGAZER.y-CENTER.y,STARGAZER.x-CENTER.x);        //Угол:
                                //STARGAZER.x = CENTER.x + Math.cos(ANGLE) * RADIUS;
                                //STARGAZER.y = CENTER.y + Math.sin(ANGLE) * RADIUS;
                                STARGAZER.x = CENTER.x + Math.cos(ANGLE) * 200;
                                STARGAZER.y = CENTER.y + Math.sin(ANGLE) * 200;
                        }
                }
        }
}

Добавлено через 44 секунды
Цитата:

Сообщение от Akopalipsis (Сообщение 1157441)
Это же означает возвратить?

Всё верно, извините.

Добавлено через 1 минуту
Если работает прокомментированный код, то звездочёты куда-то улетают.

Добавлено через 9 минут
Цитата:

Сообщение от Akopalipsis (Сообщение 1157441)
Это же означает возвратить? Получается что объект был в точки А, потом оказался в В и его нужно вернуть в А.
А какие для этого есть значения.

Получается, что объект был в точке A, потом определив его координаты мы добавляем его туда же, но только через косинусы\синусы.

Akopalipsis 16.01.2014 00:53

Цитата:

Если работает ЗАкомментированный код, то звездочёты куда-то улетают.
Первое что мне бросилось, это -
Код AS3:

Settings.mainContainer.stageWidth/2

это Вы делите на два...
Код AS3:

.2 * (CENTER.x + Math.cos(ANGLE) * RADIUS)

а это Вы делите на .2. я это к тому, что я раньше не знал этого:)

Dip52 16.01.2014 00:57

Цитата:

Сообщение от Akopalipsis (Сообщение 1157448)
Первое что мне бросилось, это -
Код AS3:

Settings.mainContainer.stageWidth/2

это Вы делите на два...
Код AS3:

.2 * (CENTER.x + Math.cos(ANGLE) * RADIUS)

а это Вы делите на .2. я это к тому, что я раньше не знал этого:)

Я поправил код. Такого не должно быть. Делю на два затем, чтобы узнать центр сцены.

Dip52 16.01.2014 01:26

Туда, где он был изначально, но только с помощью косинуса\синуса\угла\радиуса.


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

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.