2012-06-07 3 views

답변

4

오른쪽 하단 모서리로 질문 그냥 물어 (변경되지 않음) 사각형

[+ deltaY에 1 개의 + 길이, Y1].

import flash.geom.Matrix; 

var temp_matrix = new Matrix(); 

var square:Sprite = new Sprite(); 
addChild(square); 
square.graphics.lineStyle(3,0x000000); 
square.graphics.drawRect(0,0,200,100); 
square.graphics.endFill(); 

var angle:Number = -10; // the angle of degrees 
temp_matrix.b = Math.PI * 2 * angle/360;// y skew 
//temp_matrix.c = Math.PI * 2 * angle/360;// x skew 

var sourceMatrix:Matrix = square.transform.matrix;// get existing matrix 
sourceMatrix.concat(temp_matrix); // apply skew to existing matrix 
square.transform.matrix = temp_matrix;// assign the new skew 

square.x = 100 
square.y = 100 

[SECOND ROUND]

var trapezium:Sprite = new Sprite(); 
addChild(trapezium); 
trapezium.x = 100; 
trapezium.y = 100; 

var dir:Boolean = true; 
var side:Boolean = true; 
var angle:Number = 0; // the angle of degrees 
var w:Number = 300; 
var h:Number = 80; 


var timer:Timer = new Timer(16); 
timer.addEventListener(TimerEvent.TIMER, tick); 
timer.start(); 

function tick(e:TimerEvent):void{ 
    var radians:Number = Math.PI/180*angle; 
    trapezium.graphics.clear(); 
    trapezium.graphics.beginFill(0x000000) 
    if(side){ 
     // long side is right side 
     trapezium.graphics.lineTo(w,0); 
     trapezium.graphics.lineTo(w,radians*w+h); 
     trapezium.graphics.lineTo(0,h); 
     trapezium.graphics.lineTo(0,0); 
    }else{ 
     trapezium.graphics.lineTo(w,0); 
     trapezium.graphics.lineTo(w,h); 
     trapezium.graphics.lineTo(0,radians*w+h); 
     trapezium.graphics.lineTo(0,0); 
    } 
    trapezium.graphics.endFill(); 
    if(angle>=10){ 
     dir = false; 
    } 
    if(angle<=0){ 
     dir = true; 
    } 
    if(dir){ 
     angle = angle+.2; 
    }else{ 
     angle = angle-.2; 
    } 
    if(Math.floor(angle*10) <= 0){ 
     side = !side; 
    } 
} 
+0

안녕하세요. 많은 도움을드립니다. 정말 고마워. 불행하게도 나는 원래 내가 원했던 것에 대해 약간 불분명했기 때문에 그것이 내 침대 시간 일 것임에 틀림 없다. 방금 게시물을 편집하여 확인해 보았습니다. – Tom

+0

당신이 게시 한 원본 사진과 매우 다른 롤. 이를 위해서는 그려야 할 행렬을 사용할 수 없습니다. 내가 뭔가를 생각해 낼 수 있는지 보자. –

+0

그래, 나는 한 부분을 내려 나머지 부분을 알아 내려고 노력했다. 나는 당신이 원래 부름 받았던 것이 있기 때문에 어쨌든 정확한 것으로 당신을 표시 할 것입니다. – Tom

3

하부 축의 델타 Y를 얻을 수있는 각도의 탄젠트를 가지고 직사각형의 폭에 의해 곱 나는 당신
에 대한 몇 가지 코드를 채찍질

+0

+1. 여기에서 사용 된 너비는 마지막 왼쪽에서 오른쪽 방향의 모양이 아니라 아래쪽 세그먼트의 길이 (실제로는 더 길다)라는 것을 명확히하고 싶습니다. – Cameron

+0

도움을 주셔서 감사합니다, 나는 이것을 지금 시도 할 것입니다! – Tom

+0

안녕하세요. 도움이 많이되었습니다! 정말 고마워. 불행하게도 나는 원래 내가 원했던 것에 대해 약간 불분명했기 때문에 그것이 내 침대 시간 일 것임에 틀림 없다. 방금 게시물을 편집하여 확인해 보았습니다. – Tom

1

AS 몰라,하지만 정점이 보이는 같은 채워진 다각형 편집 후 :

P0 =(X0, Y0) 
P1 = (X1, Y0) 
if Angle >= 0 then 
    P2 = (X1, Y1) 
    P3 = (X0, Y1 + (X1-X0) * Tan(Angle)) 
else 
    P2 = (X1, Y1 - (X1-X0) * Tan(Angle)) 
    P3 = (X0, Y1) 
관련 문제