1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209
|
program Trace;
{$FRAME_WIDTH 700}
{$FRAME_HEIGHT 700}
{$BACKGROUND $A6CAF0}
{$FRAME_RATE 30}
uses Flash8,math;
const
Pi = 3.14159265359;
type
RealMovie = class(MovieClip)
graph_width,graph_height:integer;
xmin, xmax, ymin ,ymax , xsize ,ysize , Gx, Gy ,xo ,yo: number;
Arrow,courbe: Array of Point;
Procedure RMoveTo(x,y:number);
Procedure RLineTo(x,y:number);
Procedure RLine(x1,y1,x2,y2:number);
//Procedure RLineDashto(x1,y1,x2,y2:number);
Procedure RPolyline;
Procedure Rrectangle(x1,y1,x2,y2:number);
Procedure RCircle(Cx,Cy,Radius:number);
Procedure RCurveTo(x1,y1,x2,y2:number);
procedure RArrow(x1,y1,x2,y2:number;col,penw:integer); //flèche
procedure RArrow2(Fx,Fy,norme,alpha:number;col,penw:integer);//en coords polaires /alpha en °
end;
TGraphe=class(movieclip)
x:number;
espace:Realmovie; //pour faire des clear en cas d'animation
traj:array of Point;
constructor Create;
procedure onEnterFrame;
end;
var tabmax:integer;
Function sqr(n:Double):Double;
begin
result:=n*n;
end;
Function FloattostrF(number:Double;digit:integer):String;
var int:integer;
frac,frac1,frac2,newnumber:Double;
begin
int:=trunc(number);
frac:=number-int;
frac1:=trunc(pow(10,digit)*frac)/pow(10,digit);
frac2:= trunc(pow(10,digit+1)*frac)/pow(10,digit+1);
if (frac2-frac1)*pow(10,digit+1)>=5 then newnumber:=int+frac1+pow(10,-digit) else newnumber:=int+frac1;
result:=floattostr(newnumber);
end;
// Méthodes de dessin de Realmovie
Procedure RealMovie.RMoveTo(x,y:number);
begin
Moveto(xo+x*Gx,yo-y*Gy);
end;
Procedure RealMovie.RLineTo(x,y:number);
begin
Lineto(xo+x*Gx,yo-y*Gy);
end;
Procedure RealMovie.RLine(x1,y1,x2,y2:number);
begin
RMoveto(x1,y1);
RLineto(x2,y2);
end;
Procedure RealMovie.RPolyline;
var i:integer;
begin
RMoveto(courbe[0].x,courbe[0].y);
for i:=1 to tabmax do Rlineto(courbe[i].x,courbe[i].y);
end;
Procedure RealMovie.Rrectangle(x1,y1,x2,y2:number);
begin
RMoveto(x1,y1);
RLineTo(x2,y1);
RLineto(x2,y2);
RLineto(x1,y2);
RLineto(x1,y1);
end;
Procedure RealMovie.Rcircle(Cx,Cy,Radius:number); //si orthonormé
var a,b,R: number;
begin
R:=radius*Gx;
Cx:=xo+Cx*Gx;
Cy:=yo-Cy*Gy;
a:= R * 0.414213562;
b:= R * 0.707106781;
moveTo(Cx+R,Cy);
CurveTo(Cx+ R, Cy+-a, Cx+b,Cy -b);
CurveTo(Cx+ a,Cy-R,Cx,Cy -r);
CurveTo(Cx-a,Cy -R,Cx-b,Cy -b);
CurveTo(Cx-R, Cy-a,Cx-R,Cy);
CurveTo(Cx-R,Cy+a,Cx-b,Cy+b);
CurveTo(Cx-a,Cy +R,Cx,Cy+r);
CurveTo(Cx+a,Cy +R,Cx+b,Cy+b);
CurveTo(Cx+R,Cy+a,Cx+R,Cy);
end;
Procedure RealMovie.RArrow(x1,y1,x2,y2:number;col,penw:integer);//flèche
var i:integer;
Norme,cX,cY: number;
ALength,AWidth:number; //longueur et largeur de la pointe
begin
ALength:=10;
AWidth:=7;
x1:=xo+x1*Gx;
x2:=xo+x2*Gx;
y1:=yo-y1*Gy;
y2:=yo-y2*Gy;
Norme:=SQRT((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
if Norme=0 then Exit;
cX:=(x2-x1)/Norme;
cY:=(y2-y1)/Norme;
Arrow[0]:=Point.create(x2,y2);
Arrow[1]:=Point.create(x2-cX*ALength+cY*AWidth,y2-cY*ALength-cX*AWidth);
Arrow[2]:=Point.create(x2-cX*ALength-cY*AWidth,y2-cY*ALength+cX*AWidth);
Arrow[3]:=Point.create(x2,y2);
Linestyle(penw,col);
BeginFill(col);
Moveto(x1,y1);
Lineto(x2,y2);
Moveto(arrow[0].x,arrow[0].y);
for i:=1 to 3 do lineto(arrow[i].x,arrow[i].y);
Endfill();
end;
procedure RealMovie.RArrow2(Fx,Fy,norme,alpha:number;col,penw:integer);//Flèche en coords polaires
var theta: number;
L,L1: number;
xf1,yf1 :number;
xf2,yf2 :number;
x,y : number;
begin
alpha:=pi*alpha/180;
x:=norme*cos(alpha);
y:=norme*sin(alpha);
if x<>0.0 then theta:=atan2(y,x) else theta:=0;
L:=sqrt((x*x)+(y*y))/10;
L1:=L/2;
xf1:=-L*cos(theta)-L1*sin(theta);
xf2:=-L*cos(theta)+L1*sin(theta);
yf1:=-L*sin(theta)+L1*cos(theta);
yf2:=-L*sin(theta)-L1*cos(theta);
linestyle(penw,col);
RLine(Fx,Fy,Fx+x,Fy+y);
RLine(x+Fx,y+Fy,x+Fx+xf1,y+Fy+yf1);
RLine(x+Fx,y+Fy,x+Fx+xf2,y+Fy+yf2);
end;
procedure RealMovie.RCurveto(x1,y1,x2,y2:number);
begin
curveto(xo+x1*Gx,yo-y1*Gy,xo+x2*Gx,yo-y2*Gy);
end;
//fin méthodes realmovie
constructor TGraphe.Create;
begin
inherited Create(nil,'mongraphe',1);
espace:=RealMovie.Create(SELF,'espace',1);
espace._x:=0;
espace._y:=0;
espace.graph_width:=700;
espace.graph_height:=700;
espace.xmin:= -10;
espace.xmax := 10;
espace.ymin := -10;
espace.ymax :=10;
espace.xsize:= espace.xmax -espace. xmin;
espace.ysize:= espace.ymax - espace.ymin;
espace.Gx := espace.graph_width / espace.xsize;
espace.Gy := espace.graph_height/ espace.ysize;
espace.xo :=-espace.xmin * espace.Gx;
espace.yo :=espace. ymax * espace.Gy;
x:=espace.xmin;
espace.Rarrow(-10,0,10,0,$00000,2);
espace.Rarrow(0,-10,0,10,$00000,2);
end;
procedure TGraphe.onEnterFrame;
begin
if x<espace.xmax then
begin
x:=x+0.5;
espace.linestyle($00000,1);
espace.RLine(x,3*x+2,x+0.5,3*(x+0.5)+2);
end;
end;
begin
TGraphe.create;
end. |
Partager