Aide - Recherche - Membres - Calendrier
Version complète : N-Gone polygone + Trigonometrie
Centre de Formation Flash - Forums Adobe Flash > Adobe Flash > Programmation Actionscript > Actionscript 3
auricom
Bonjour

je cherche a creer un N-Gone ou polygone a base de rectangle pour creer une demi-sphere


....______
.../...........\
../.............\
.|...............|

c est pas vraiment tres spherique mon truc la, mais c est pour donner une idee

en gros je commence comme ceci

Action Script


function transfDegreeToRadian(a:Number):Number
{
var r:Number = Math.PI * 2 * (a / 360);
return r;
}




var angleRef:uint = 9;
var angle = transfDegreeToRadian(angleRef);

var a:Number = 300; // largeur de mon cercle
var h:Number = a/2;

var leftPos:Number = ( a / 2);


for (var j:uint = 0; j < 180/angleRef; j++)
{

var angleLive = -1 * (( -angleRef * (1 + j)) ); //calcul de l angle au fur et a mesure de l avancement dans la boucle
var angleLiveRad = transfDegreeToRadian(angleLive); //calcul de l angle precedent en radian pour d'autres calculs
trace("angleLive :" + angleLive + " angleRad :" + angleLiveRad);



var lengthC:Number = 2*Math.sqrt(Math.abs(((Math.cos(angle/2)*a)-a))*((Math.cos(angle/2) * a) + a)); // valeur de mon cote C qui correspond a la largeur du rectangle qui se trouve sur la tangente du cercle

trace("lengthC :" + lengthC);

var lengthB:Number = Math.abs(Math.sin(angleLive / 2) * lengthC) ; // positionnement de mon rectangle sur les X
var lengthH:Number = Math.sqrt(lengthC * lengthC + lengthB * lengthB); // positionnement de mon rectangle sur les Y
trace("lengthH :" + lengthH);


var firstLengthB:Number;
var firstLengthH:Number;

if (j == 0)
{
firstLengthB = lengthB;
firstLengthH = lengthH;
}
if (j > 0)
{
lengthB = lengthB + previousLengthB;
lengthH = lengthH + previousLengthH;
}


var previousLengthB:Number = lengthB;
var previousLengthH:Number = lengthH;
trace("lengthB :" + lengthB);


var myLine:Shape = new Shape();
myLine.graphics.lineStyle(2, 0xFF6600);
myLine.graphics.beginFill(0xFFCC00, 1);
myLine.graphics.drawRect((leftPos-firstLengthB)+lengthB, (h+firstLengthH)-lengthH, 20, lengthC);
myLine.graphics.endFill();
myLine.rotation = angleLive;
addChild(myLine);

}


bon voila le resultat est pas tres proche d une sphere
mais ca fait longtemps que j ai pas fait de trigo, tres longtemps

une petite piste?
stealth35
pas bien compris , mai tu veux faire une arche avec des brique de la meme longueur en gros ?
auricom
oui c est ca
la pieuvre
pour être bien sur de comprendre moi aussi tu veux faire u demi cercle avec des briques de taille fixe genre :
auricom
c est exactement ca, sauf que l ideal serait que les paves se superposent un peu plus pour que les zones qui se touchent aient une surface commune plus grande
stealth35
bon c'est pa top mais tu peu tester ca

Action Script


var nr:int=12;
var sprite:Sprite = new Sprite();
sprite.graphics.lineStyle(1, 0xff00ff);
sprite.graphics.moveTo(stage.stageWidth * 0.5, stage.stageHeight * 0.5);
for (var i:int = 0; i < nr; i++) {
var ax:Number = Math.cos(Math.PI * (i / (nr - 1)));
var ay:Number = Math.sin(Math.PI * (i / (nr - 1)));
var dx:Number = Math.cos(Math.PI * ((i + 1) / (nr - 1)));
var dy:Number = Math.sin(Math.PI * ((i + 1) / (nr - 1)));
var xp:Number=100*ax+stage.stageWidth*0.5;
var yp:Number=-100*ay+stage.stageHeight*0.5;
var dxp:Number=100*dx+stage.stageWidth*0.5;
var dyp:Number=-100*dy+stage.stageHeight*0.5;

sprite.graphics.lineTo(xp, yp);
sprite.graphics.lineTo(xp + 10 * dx, yp - 10 * dy);
sprite.graphics.lineTo(dxp + 10 * dx, dyp - 10 * dy);
sprite.graphics.lineTo(dxp, dyp);
sprite.graphics.moveTo(xp, yp);
}
sprite.graphics.lineTo(stage.stageWidth * 0.5, stage.stageHeight * 0.5);
sprite.graphics.endFill();

addChild(sprite);
auricom
salut stealth35

ca se tient sauf que j ai besoin de un var sprite par rectangle, pas de moveTo, seulement un repositionement des sprite rectangle pour faire la forme c est tu faisables avec ton code, je vais essayer
la pieuvre
vite fait ça donne ça :

Action Script

var nbBric:Number = 10;
var hauteurBrick:Number = 10;
var rayon:Number = 150;
var centrex:Number = 200;
var centrey:Number = 200;

function Bric(l:Number):MovieClip{
var mc:MovieClip = new MovieClip();
mc.graphics.beginFill(0xff0000,1);
mc.graphics.drawRect(0,0,hauteurBrick,l);
mc.graphics.endFill();
return mc;
}

var angle:Number = Math.PI/2/nbBric
var l:Number = Math.sin(angle)* rayon*2;
trace(l)
for (var i:Number = 0 ; i< nbBric; i++) {
var mc:MovieClip = Bric(l);
mc.x = centrex + Math.cos(i*angle*2)*rayon;
mc.y = centrey + Math.sin(i*angle*2)*rayon;
mc.rotation = (180/nbBric*i)
addChild(mc)
}


reste à pofiner
auricom
c est super ca me donne une tres bonne base

merci beaucoup
la pieuvre
et hop une version final wink.gif

Action Script

var nbBric:Number = 25;
var hauteurBrick:Number = 10;
var rayon:Number = 150;
var centrex:Number = 200;
var centrey:Number = 200;

function Bric(l:Number):MovieClip{
var mc:MovieClip = new MovieClip();
mc.graphics.beginFill(0xff0000,1);
mc.graphics.drawRect(0,0,hauteurBrick,l);
mc.graphics.endFill();
return mc;
}

var angleR:Number = Math.PI/2/nbBric
var angle:Number = 180/nbBric
var l:Number = Math.sin(angleR)* rayon*2;
for (var i:Number = 0 ; i< nbBric; i++) {
var mc:MovieClip = Bric(l);
mc.x = centrex - Math.cos(i*angleR*2)*rayon;
mc.y = centrey + Math.sin(i*angleR*2)*rayon;
mc.rotation = -(angle*i)-(angle/2)
addChild(mc)
}
r3b00t
Citation (la pieuvre @ Dec 3 2008, 11:08 PM) *
et hop une version final wink.gif

Action Script

var nbBric:Number = 25;
var hauteurBrick:Number = 10;
var rayon:Number = 150;
var centrex:Number = 200;
var centrey:Number = 200;

function Bric(l:Number):MovieClip{
var mc:MovieClip = new MovieClip();
mc.graphics.beginFill(0xff0000,1);
mc.graphics.drawRect(0,0,hauteurBrick,l);
mc.graphics.endFill();
return mc;
}

var angleR:Number = Math.PI/2/nbBric
var angle:Number = 180/nbBric
var l:Number = Math.sin(angleR)* rayon*2;
for (var i:Number = 0 ; i< nbBric; i++) {
var mc:MovieClip = Bric(l);
mc.x = centrex - Math.cos(i*angleR*2)*rayon;
mc.y = centrey + Math.sin(i*angleR*2)*rayon;
mc.rotation = -(angle*i)-(angle/2)
addChild(mc)
}


C'est sympa la trigo icon_biggrin.gif
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'informations, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2009 Invision Power Services, Inc.