void S_PicXZ(Graphics::TBitmap *Source,Graphics::TBitmap *NewPic,int angle)// { ! B2 `" `4 k- ]' I if(angle>180)angle=360-angle; if(angle<-180)angle=360+angle;
float radians=(2*3.1416*angle)/360; Q. ?5 m1 B6 R float cosine=(float)cos(radians); , J- N# D6 j7 k9 `/ z float sine=(float)sin(radians); float Point1x=(-Source->Height*sine); + N; [% E! E/ b# O float Point1y=(Source->Height*cosine); float Point2x=(Source->Width*cosine-Source->Height*sine); # [& C; q+ K7 E! t float Point2y=(Source->Height*cosine+Source->Width*sine); 5 w0 X; I: z& s, a" I3 @2 F float Point3x=(Source->Width*cosine); float Point3y=(Source->Width*sine); 1 V4 h8 r- K- B( d float minx=min((float)0,min(Point1x,min(Point2x,Point3x))); $ Q# I' q9 j7 P! x- V: U float miny=min((float)0,min(Point1y,min(Point2y,Point3y))); 6 j6 \5 D" G! T/ J% a4 C float maxx=max(Point1x,max(Point2x,Point3x)); float maxy=max(Point1y,max(Point2y,Point3y)); 1 p) g; a# e$ B J7 E: ?9 T+ ~ int DestBitmapWidth,DestBitmapHeight; - c5 y: I- }# @$ L if(angle>90&&angle<180) u9 Y }# e Y/ Q; u( R. n( ? DestBitmapWidth=(int)ceil(-minx); 5 f. A- L: \% J else DestBitmapWidth=(int)ceil(maxx-minx);
/ U6 K$ S' X& }% o% j p/ k4 eif(angle>-180&&angle<-90) . H. A" e- T9 Y6 Y DestBitmapHeight=(int)ceil(-miny); else 6 h7 s( ?% Z8 H- W9 ?: l DestBitmapHeight=(int)ceil(maxy-miny);
NewPic->Height=DestBitmapHeight; I6 ?4 n2 A' h$ n4 x
NewPic->Width=DestBitmapWidth; * ]0 W, k8 Y1 \& }6 ~, j# t" p
for(int x=0;x<DestBitmapWidth;x++) & p7 Q7 l6 Q1 f. M$ a
{
for(int y=0;y<DestBitmapHeight;y++){ 3 r$ c' t4 O0 t2 ]# b# ` r& T, T
int SrcBitmapx=(int)((x+minx)*cosine+(y+miny)*sine);
int SrcBitmapy=(int)((y+miny)*cosine-(x+minx)*sine);
if(SrcBitmapx>=0&&SrcBitmapx<Source->Width&&SrcBitmapy>=0&& 1 f/ o3 B# Q) A% q j
SrcBitmapy<Source->Height)
{ T2 Y2 s3 y# z" X
NewPic->Canvas->
ixels[x][y]= ) E; @- w5 L9 s; m5 D* H) X
Source->Canvas->
ixels[SrcBitmapx][SrcBitmapy]; & H8 i. r3 q; M( d
} & M7 ?% G' D# @
}
} " M6 @4 E: ^& n$ D9 `
}
| 欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) | Powered by Discuz! X2.5 |