2010-08-05 5 views
0

기본적으로 개체를 크기 조절/회전 할 수있는 표시 개체 변환 관리자를 만들려고합니다. 저는 현재 마우스의 현재 x와 y 다음에 모서리가 오도록 객체를 회전시키는 방법을 찾으려고합니다. AS3 : 마우스로 DisplayObject 회전

Example 1 http://www.freeimagehosting.net/uploads/ae697efb80.jpg Example 2 http://www.freeimagehosting.net/uploads/1a968e5e2b.jpg Example 3 http://www.freeimagehosting.net/uploads/1270816f01.jpg

나는 항상이 같은 것들의 수학에 혼란스러워. 나는 사건과 모든 것을 듣는 법을 안다, 나는 단지 적용 할 회전의 양을 계산하는 방법에 대해 확신 할 수 없다. 매트릭스의 왼쪽 위 모서리가 아닌 중심을 중심으로 객체를 회전시킬 수 있도록 매트릭스를 통해 회전시킬 것입니다. 이 수학의 숙련 된 사람이라면 누구든지 나를 도울 수 있습니까?

답변을 TROBADOUR에 대한 응답으로

내가 전혀 이해할 수 없을 정도로 훌륭합니다. 내가 이해할 수있는 것과 내가 할 수없는 것에 대해 설명하겠습니다.

var box:Sprite = new BeautifulSprite(); 
box.width = box.height = 100; 
/* ... */ 
var registrationPoint:Point = new Point(box.x + box.width/2, 
     box.y + box.height/2); 

암 :

첫째, 이미지의 중간 일 무슨 저장, 소위 등록 포인트가있는 주위에 우리가 모든 것을 회전합니다 : 여기 /를 이해하지 않는 무엇을 연습이다 나는 지금까지 올바른가? 그렇다면 계속하겠습니다.

둘째, 원래의 마우스 다운 위치를 나타냅니다 ". 벡터"

var mouseDownPoint:Point = new Point(box.mouseX, box.mouseY); 

셋째, 저장을 문제는, 당신이 무엇을 의미하는지 모르겠습니다. Java 및 AS3의 Vector 유형에 익숙하며 특정 유형의 값 목록을 저장합니다. 그 너머, 나는 길을 잃었다.

var vector:* = WTF.forReals(); 

다음, registrationPointmouseDownPoint과의 사이의 거리를 저장한다. 나는 고등학교 때 두 지점 사이의 거리를 계산하는 것에 대해 배웠다. 두 점 사이의 거리를 계산할 수있을 것이라고 확신한다.

var distance:Number = calculateDistance(registrationPoint, mouseDownPoint); 

나는 가까이 가고 있습니다. 그런 다음 제한된 눈금을 결정하기 위해 현재 마우스 위치를 얻고 거리를 registrationPoint으로 결정한 다음이를 distance으로 나눕니다. 여기

var constrainedScale:Number = calculateDistance(registrationPoint, new Point(mouseX, mouseY))/distance; 

내 질문은 : 는 어떻게 값을받을 수 있나요 내가 scaleX가 및 scaleY처럼 그들을 제한하지 않으려는 경우?

등록 포인트를 중심으로 실제 회전을 얻으려면 완전히 손실됩니다. 위에서 정의한 변수를 사용하여 나를 도울 수 있습니까?

+0

현재 제기 된 바와 같이,이 질문은별로 의미가 없습니다. 그림 모서리를 마우스를 정확히 따라갈 수 없으며 고정 점 하나만 회전 할 수 있습니다. – Troubadour

+0

오, 당신도 규모를 언급, 내가 다시 받아! – Troubadour

+0

척도가 지금 최우선 순위가 아닙니다. (당신이 달리기 전에 걷는다) 나는 이미지 x와 y와 비교하여 마우스 x와 y를 기반으로 한 회전 정도를 계산하고 싶다. 나는 수학이 그것에 좋을지에 대해 완전히 공백을 그릴뿐입니다. 나는 어떤 휴식과 음식을 가져올 필요가있다. 그러나 누군가가 어떤 생각을 가지고 있다면, 다시 붙잡아 두지 마라. –

답변

3

비 눈금, 회전되지 않은 상태에서 (x1, y1)과 같이 눈금/회전 중심의 마우스 좌표를 (x0, y0) 및 모퉁이의 마우스 좌표로 나타냅니다. 점 (x0, y0)을 저장하고 (x0, y0)과 (x1, y1) 사이의 벡터와 거리를 캐시합니다. 캐시 된 벡터를 v0로, 거리를 d0으로 나타냅니다.

스케일 팩터를 얻으려면 현재 마우스 좌표 거리를 (x0, y0)로 계산하고이를 d0으로 나눕니다.

먼저 회전 각을 얻으려면 (x0, y0)과 현재 마우스 좌표 간의 벡터를 계산하십시오. v로 표시하고, 내적 수식을 사용하여 각도를 계산하십시오.

v.v0 = | v | d0 cos (theta)

0과 pi 사이의 값을 제공합니다. 올바른 사분면으로 들어가기 위해서는 v와 v0의 외적의 부호를 검사하고 그에 따라 조정하십시오.

+0

LOL. 영어 버전이 있습니까? 꼬마 야. 진심으로, 마우스가 움직이는 동안 내게 기본적으로 네 좌표를 사용할 수있다 : originalMouseDownX, originalMouseDownY, currentMouseX, currentMouseY. 회전 값을 결정하기 위해이 값에 적용 할 공식은 무엇인가? , do not care?) –

+0

d0은 무엇입니까? –

+0

@rfkrocktk : d0은 벡터 v0의 길이입니다. – Troubadour