typedef strUCt _XFORM {
FLOAT eM11; 水平縮放因子,旋轉角度的余弦
FLOAT eM12; 水平比例因子,旋轉角度的正弦
FLOAT eM21; 垂直比例因子,旋轉角度的正弦負值
FLOAT eM22; 垂直縮放因子,旋轉角度的余弦
FLOAT eDx; 水平轉換偏差
FLOAT eDy; 垂直轉換偏差
} XFORM;
X’ = x * eM11 + y * eM21 + eDx
Y’ = x * eM12 + y * eM22 + eDy
void __fast call TForm1::rotatedraw(int x, int y,/* 中心點是指圍繞旋轉的點*/float ff, /*指針值是指針指向的數值*/float hr,float lr, /*量程范圍是指針表的顯示數值區間*/ float scale0,float scale1, /*角度范圍是指針表的顯示角度區間*/float rscale, /*零點角度是指針表的最小顯示數值角度*/ Graphics::TBitmap *p/*指針位圖是指針的標準橫向由左向右的位圖指針*/){
XFORM xform;
Float tf, f;
/*防止除零導致浮點溢出*/
If (x==0) x=0.0001;
/*旋轉角度換算*/
To=(ff-lr)*(scale0-scale1)/(hr-lr)-rscale;
F=3.14159265*tf/180;
/*轉換坐標系定義*/
Xform.eM11 = cos (f);
Xform.eM12 = sin (f);
Xform.eM21 = -sin (f);
Xform.eM22 = cos (f);
Xform.eDx =x- (sqrt (x*x+y*y))*(cos (f+atan (y/x)));//-sin (f)*p->Height/2;
Xform.eDy =y- (sqrt (x*x+y*y))*(sin (f+atan (y/x)));//-cos (f)*p->Height/2;
/*轉換坐標系設置*/
SetGraphicsMode (Form1->Canvas->Handle, GM_ADVANCED);
SetWorldTransform (Form1->Canvas->Handle, &xform);
/*透明方式*/
P->Transparent = true;
/*透明顏色定義*/
P->Transparent Color = p->Canvas->Pixels [0][0];
/*指針繪制*/
Form1->Canvas->Draw (x, y, p);
/*透明方式取消*/
P->Transparent = false;
/*轉換坐標系恢復設置*/
Xform.eM11 = 1;
Xform.eM12 = 0;
Xform.eM21 = 0;
Xform.eM22 = 1;
Xform.eDx = 0;
Xform.eDy = 0;
SetWorldTransform (Form1->Canvas->Handle, &xform);
}
X-HorzScrollBar->Position
Y-VertScrollBar->Position
在實現漫游操作時,執行
HorzScrollBar->Position= HorzScrollBar->Position +movx/*偏移量x*/
VertScrollBar->Position=VertScrollBar->Position+movy; /*偏移量y*/
xform.eM11 =X坐標比例因子;
Xform.eM12 =0;
Xform.eM21 = 0;
xform.eM22 =Y坐標比例因子;;
xform.eDx =偏移量x;
xform.eDy =偏移量y;
新聞熱點
疑難解答