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

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

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

Регистрация: Feb 2009
Сообщений: 28
Как все печально.

Старый 20.01.2010, 13:24
random13 вне форума Посмотреть профиль Отправить личное сообщение для random13 Найти все сообщения от random13
  № 22  
Ответить с цитированием
random13
 
Аватар для random13

Регистрация: Oct 2006
Адрес: Москва
Сообщений: 889
ну и что мне с этим печально сделать... в топик по крайней мере три формулы написали и какую точно использовать так и не сказали
__________________
Коллекционирую чужие ActionScript Блоги

Старый 20.01.2010, 16:49
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 23  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,601
Записей в блоге: 17
Всё для вас.

Старый 20.01.2010, 17:20
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 24  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Цитата:
Сообщение от random13 Посмотреть сообщение
ну и что мне с этим печально сделать... в топик по крайней мере три формулы написали и какую точно использовать так и не сказали
Ну ты с ейчас пошутил правда?
Первый же ответ в этом топике является окончательным:
Цитата:
Сообщение от Division Посмотреть сообщение
Math.atan2
А потом начали наваливать хлама и философии. Какие три формулы?

P.S.
Аж неловко оттого, что я повторяюсь... то же самое, только короче и сдержанней, писал выше =)
__________________
Поймай яблоко 2!

Старый 13.11.2010, 19:11
FieryWall вне форума Посмотреть профиль Отправить личное сообщение для FieryWall Найти все сообщения от FieryWall
  № 25  
Ответить с цитированием
FieryWall
 
Аватар для FieryWall

Регистрация: Nov 2010
Сообщений: 190
Отправить сообщение для FieryWall с помощью ICQ Отправить сообщение для FieryWall с помощью Skype™
А если угол надо найти с вершиной в точке(Point)?
В моем случае нужен угол перемещения курсора после нажатия относительно точки.

Старый 14.11.2010, 15:16
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 26  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
ИМХО всетки, чтобы в любой ситуации получить именно наименьший угол между векторами и без всяких делений на ноль(за исключением случая с векторами нулевой длинны) надо делать так:
Название: angle.png
Просмотров: 372

Размер: 33.0 Кб

Цитата:
Код AS3:
Math.asin((x2-x1)/(y1-y2))*(180/Math.PI);
Можно огрести со 2-й и 3-й четверями, плюс при 90 и -90 градусах будет деление на ноль, плюс работает только если первый вектор совпадает с осью координат


Последний раз редактировалось expl; 14.11.2010 в 15:35.
Старый 14.11.2010, 17:08
FieryWall вне форума Посмотреть профиль Отправить личное сообщение для FieryWall Найти все сообщения от FieryWall
  № 27  
Ответить с цитированием
FieryWall
 
Аватар для FieryWall

Регистрация: Nov 2010
Сообщений: 190
Отправить сообщение для FieryWall с помощью ICQ Отправить сообщение для FieryWall с помощью Skype™
Не прокатило
Код AS3:
package {
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	import flash.geom.Point;
	public class Main extends Sprite {
		var pot:Sprite;
		var point:Point;
		var save1:Point;
		var save2:Point;
		var angle:Number;
		public function Main() {
			point=new Point(100,100);
			pot=new Sprite;
			pot.graphics.beginFill(0xFF0000);
			pot.graphics.drawRect(-5,-5,10,10);
			addChild(pot);
			pot.x=point.x;
			pot.y=point.y;
			pot.addEventListener(MouseEvent.MOUSE_DOWN, potDownListener);
			pot.addEventListener(MouseEvent.MOUSE_UP, potUpListener);
 
			stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownListener);
			stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpListener);
		}
		private function potDownListener(event:MouseEvent):void{
			pot.startDrag(false);
		}
		private function potUpListener(event:MouseEvent):void{
			point.x=pot.x;
			point.y=pot.y;
			pot.stopDrag();
		}
		private function mouseDownListener(event:MouseEvent):void {
			save1=new Point(mouseX,mouseY);
			stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveListener);
		}
		private function mouseMoveListener(event:MouseEvent):void{
			save2=new Point(mouseX,mouseY);
			var dssX1:Number=save1.x-point.x;
			var dssX2:Number=save2.x-point.x;
			var dssY1:Number=save1.y-point.y;
			var dssY2:Number=save2.y-point.y;
			//var modul1:Number=Math.sqrt(dssX1*dssX1+dssY1*dssY1);
			//var modul2:Number=Math.sqrt(dssX2*dssX2+dssY2*dssY2);
			//var a:Number=Math.atan2((dssX1*dssY1+dssX2*dssY1)/(modul1*modul2),(dssX1*dssY2-dssX2*dssY1)/(modul1*modul2));
			var a:Number=Math.atan2((dssX1*dssY1+dssX2*dssY1),(dssX1*dssY2-dssX2*dssY1));
			angle=a*180/Math.PI;
			trace(angle);
		}
		private function mouseUpListener(event:MouseEvent):void{
			removeEventListener(MouseEvent.MOUSE_MOVE, mouseMoveListener);
		}
	}
}

Старый 14.11.2010, 18:58
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 28  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Да, поднакосячил маленько, еще оказалось что atan2(y, x), а подсказка во FlashBulder сказала x, y
Плюс в скалярном произведении идексы попутал (по определению (x0, y0) * (x1, y1) == x0 * x1 + y0 * y1).
Исправленное и дополненное:
Код AS3:
package 
{
	import flash.display.DisplayObject;
	import flash.display.Graphics;
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	import flash.geom.Point;
	import flash.text.TextField;
	import flash.text.TextFieldAutoSize;
	public class Main extends Sprite {
 
		private static const WIDTH:int = 800;
		private static const HEIGHT:int = 600;
 
		private var tfAngle:TextField;
 
		private var marker1:Marker;
		private var marker2:Marker;
		private var point0:Point;
		private var save1:Point;
		private var save2:Point;
		private var angle:Number;
		public function Main() {
			point0 = new Point(200, 200);
 
			drawPoint0();
 
			tfAngle = new TextField();
			tfAngle.autoSize = TextFieldAutoSize.LEFT;
			addChild(tfAngle);
 
			addChild(marker1 = new Marker());
			addChild(marker2 = new Marker());
			marker1.setPosition(point0);
			marker2.setPosition(point0);
 
			stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
			stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
		}
 
		private function drawPoint0():void
		{
			var g:Graphics = graphics;
			g.lineStyle(0, 0x000000);
			g.moveTo(0, point0.y);
			g.lineTo(WIDTH, point0.y);
			g.moveTo(point0.x, 0);
			g.lineTo(point0.x, HEIGHT);
		}
 
		private function onMouseDown(event:MouseEvent):void {
			marker1.x = mouseX;
			marker1.y = mouseY;
 
			marker2.x = mouseX;
			marker2.y = mouseY;
 
			stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
		}
 
		private function onMouseUp(event:MouseEvent):void {
			stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
			updateAngle();
		}
 
		private function onMouseMove(event:MouseEvent):void {
			updateAngle();
		}
 
		private function updateAngle():void {
			marker2.x = mouseX;
			marker2.y = mouseY;
 
			var g:Graphics = graphics;
			g.clear();
			drawPoint0();
			g.lineStyle(0, 0xff0000);
			g.moveTo(point0.x, point0.y);
			g.lineTo(marker1.x, marker1.y);
			g.moveTo(point0.x, point0.y);
			g.lineTo(marker2.x, marker2.y);
 
			var angle:Number = angleBetwin2Vectors(point0, new Point(marker1.x, marker1.y), new Point(marker2.x, marker2.y));
			tfAngle.text = "Последний посчитанный угол: " + angle + " градусов";
		}
 
		private function angleBetwin2Vectors(p0:Point, p1:Point, p2:Point):Number {
			var p01:Point = p1.clone().subtract(p0);//01 - значит вектор от точки 0 к точке 1
			var p02:Point = p2.clone().subtract(p0);
			var modul01:Number = p01.length;
			var modul02:Number = p02.length;
			var a:Number = Math.atan2(
				(p01.x * p02.y - p02.x * p01.y) / (modul01 * modul02),
				(p01.x * p02.x + p01.y * p02.y) / (modul01 * modul02)
			);
			return a * 180 / Math.PI;
		}
	}
}
 
import flash.display.Sprite;
import flash.geom.Point;
 
// Только рисует квадратик - ничего больше
class Marker extends Sprite
{
	public function Marker()
	{
		graphics.beginFill(0xFF0000);
		graphics.drawRect(-5,-5,10,10);
	}
 
	public function setPosition(point:Point):void
	{
		x = point.x;
		y = point.y;
	}
}


Последний раз редактировалось expl; 14.11.2010 в 19:00.
Старый 15.11.2010, 00:19
FieryWall вне форума Посмотреть профиль Отправить личное сообщение для FieryWall Найти все сообщения от FieryWall
  № 29  
Ответить с цитированием
FieryWall
 
Аватар для FieryWall

Регистрация: Nov 2010
Сообщений: 190
Отправить сообщение для FieryWall с помощью ICQ Отправить сообщение для FieryWall с помощью Skype™
БОООЛЬШОЕ СПАСИБО !!!!!

Старый 23.11.2010, 19:13
FieryWall вне форума Посмотреть профиль Отправить личное сообщение для FieryWall Найти все сообщения от FieryWall
  № 30  
Ответить с цитированием
FieryWall
 
Аватар для FieryWall

Регистрация: Nov 2010
Сообщений: 190
Отправить сообщение для FieryWall с помощью ICQ Отправить сообщение для FieryWall с помощью Skype™
Кто может подробно прокомментировать это:
Код AS3:
var p01:Point = p1.clone().subtract(p0);
			var p02:Point = p2.clone().subtract(p0);
			var modul01:Number = p01.length;
			var modul02:Number = p02.length;
			var a:Number = Math.atan2(
				(p01.x * p02.y - p02.x * p01.y) / (modul01 * modul02),
				(p01.x * p02.x + p01.y * p02.y) / (modul01 * modul02)
			);

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

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

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


 


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


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