Actionscript 3 基于度/弧度绘制一侧倾斜的矩形

Actionscript 3 基于度/弧度绘制一侧倾斜的矩形,actionscript-3,flash,math,actionscript,geometry,Actionscript 3,Flash,Math,Actionscript,Geometry,我试着取一个矩形的一边,然后根据角度/角度倾斜一边 取角度的切线,乘以矩形的宽度,得到底轴的δy,这样 [x1,y1]作为永远不变的矩形的原点 [x1+长度,y1+deltaY]作为右下角取角度的切线,乘以矩形的宽度,得到底轴的delta y,因此 [x1,y1]作为永远不变的矩形的原点 [x1+length,y1+deltaY]作为右下角,我为您编写了一些代码 有问题尽管问 import flash.geom.Matrix; var temp_matrix = new Matrix();

我试着取一个矩形的一边,然后根据角度/角度倾斜一边


取角度的切线,乘以矩形的宽度,得到底轴的δy,这样

[x1,y1]作为永远不变的矩形的原点


[x1+长度,y1+deltaY]作为右下角

取角度的切线,乘以矩形的宽度,得到底轴的delta y,因此

[x1,y1]作为永远不变的矩形的原点


[x1+length,y1+deltaY]作为右下角,我为您编写了一些代码 有问题尽管问

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
[第二轮]

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;
    }
}

我给你编了一些代码 有问题尽管问

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
[第二轮]

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;
    }
}

不知道是什么,但编辑后看起来像是带顶点的填充多边形:

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)

不知道是什么,但编辑后看起来像是带顶点的填充多边形:

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)

你的三角怎么样?那是平行四边形,顺便说一句,你的三角怎么样?这是一个平行四边形,顺便说一句+1。我只是想澄清一下,这里使用的宽度是形状从左到右的最终宽度,而不是底部部分的长度,事实上,它更长。谢谢你的帮助,我现在要试试这个!嗨,这是一个很大的帮助!非常感谢。不幸的是,这一定是我的就寝时间,因为我有点不清楚我最初想要什么。我刚刚编辑了这篇文章,所以请查看它。+1。我只是想澄清一下,这里使用的宽度是形状从左到右的最终宽度,而不是底部部分的长度,事实上,它更长。谢谢你的帮助,我现在要试试这个!嗨,这是一个很大的帮助!非常感谢。不幸的是,这一定是我的就寝时间,因为我有点不清楚我最初想要什么。我刚刚编辑了这篇文章,请查看。嗨,这是一个很大的帮助!非常感谢。不幸的是,这一定是我的就寝时间,因为我有点不清楚我最初想要什么。我刚刚编辑了这篇文章,所以请查看。哈哈,这与你发布的原始图片非常不同。因此,你不能使用矩阵,你必须画它。让我们看看我能不能想出点什么。是的,我想把一部分记下来,然后试着找出剩下的部分。不管怎样,我都会把你标记为正确的,因为你有最初的要求。我创建了一些东西,再次模仿你发布的gif。lol。代码很潦草,但你至少会得到使用。嗨,这是一个很大的帮助!非常感谢。不幸的是,这一定是我的就寝时间,因为我有点不清楚我最初想要什么。我刚刚编辑了这篇文章,所以请查看。哈哈,这与你发布的原始图片非常不同。因此,你不能使用矩阵,你必须画它。让我们看看我能不能想出点什么。是的,我想把一部分记下来,然后试着找出剩下的部分。不管怎样,我都会把你标记为正确的,因为你有最初的要求。我创建了一些东西,再次模仿你发布的gif。lol。代码很潦草,但你至少会得到使用。