Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 16.01.2014, 00:07
Dip52 вне форума Посмотреть профиль Отправить личное сообщение для Dip52 Найти все сообщения от Dip52
  № 1  
Ответить с цитированием
Dip52

Регистрация: Aug 2012
Сообщений: 297
По умолчанию Как правильно расчитать угол по координатам?

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

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

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

Старый 16.01.2014, 00:24
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 2  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
А что Вы в итоге хотите? я просто не понял цель Вам нужно просто точку под углом или повернуть объект на угол относительно центра к другой точки?

Старый 16.01.2014, 00:30
Dip52 вне форума Посмотреть профиль Отправить личное сообщение для Dip52 Найти все сообщения от Dip52
  № 3  
Ответить с цитированием
Dip52

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

Старый 16.01.2014, 00:37
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 4  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Вопрос о вращении во круг центра - на три темы ниже. А какие значения есть для возврата?

Старый 16.01.2014, 00:39
Dip52 вне форума Посмотреть профиль Отправить личное сообщение для Dip52 Найти все сообщения от Dip52
  № 5  
Ответить с цитированием
Dip52

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

Старый 16.01.2014, 00:41
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 6  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Цитата:
добавить объект туда же, где он был изначально
Это же означает возвратить? Получается что объект был в точки А, потом оказался в В и его нужно вернуть в А.
А какие для этого есть значения.

Старый 16.01.2014, 00:41
Dip52 вне форума Посмотреть профиль Отправить личное сообщение для Dip52 Найти все сообщения от Dip52
  № 7  
Ответить с цитированием
Dip52

Регистрация: Aug 2012
Сообщений: 297
Код 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 Посмотреть сообщение
Это же означает возвратить?
Всё верно, извините.

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

Добавлено через 9 минут
Цитата:
Сообщение от Akopalipsis Посмотреть сообщение
Это же означает возвратить? Получается что объект был в точки А, потом оказался в В и его нужно вернуть в А.
А какие для этого есть значения.
Получается, что объект был в точке A, потом определив его координаты мы добавляем его туда же, но только через косинусы\синусы.

Старый 16.01.2014, 00:53
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 8  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Цитата:
Если работает ЗАкомментированный код, то звездочёты куда-то улетают.
Первое что мне бросилось, это -
Код AS3:
Settings.mainContainer.stageWidth/2
это Вы делите на два...
Код AS3:
.2 * (CENTER.x + Math.cos(ANGLE) * RADIUS)
а это Вы делите на .2. я это к тому, что я раньше не знал этого

Старый 16.01.2014, 00:57
Dip52 вне форума Посмотреть профиль Отправить личное сообщение для Dip52 Найти все сообщения от Dip52
  № 9  
Ответить с цитированием
Dip52

Регистрация: Aug 2012
Сообщений: 297
Цитата:
Сообщение от Akopalipsis Посмотреть сообщение
Первое что мне бросилось, это -
Код AS3:
Settings.mainContainer.stageWidth/2
это Вы делите на два...
Код AS3:
.2 * (CENTER.x + Math.cos(ANGLE) * RADIUS)
а это Вы делите на .2. я это к тому, что я раньше не знал этого
Я поправил код. Такого не должно быть. Делю на два затем, чтобы узнать центр сцены.

Старый 16.01.2014, 01:26
Dip52 вне форума Посмотреть профиль Отправить личное сообщение для Dip52 Найти все сообщения от Dip52
  № 10  
Ответить с цитированием
Dip52

Регистрация: Aug 2012
Сообщений: 297
Туда, где он был изначально, но только с помощью косинуса\синуса\угла\радиуса.

Создать новую тему Ответ Часовой пояс GMT +4, время: 11:16.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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