C++ Builder中如何使用自定义坐标
?牐?//TForm1 需要改成你的程序的窗体,并且需要在类中声明
?牐?//DrawingWidth、DrawingHeight 为映射后的实际宽高
?牐?// 如x:-50~100 y:-10~20 则DrawingWidth取150,DrawHeight取30
?牐爒oid TForm1::SetViewPort(TImage *Pic,int DrawingWidth,int DrawingHeight)??
?牐爗??
?牐?//设置坐标映像模式为MM_ANISOTROPIC
?牐燬etMapMode(Pic->Canvas->Handle,MM_ANISOTROPIC);?牔?
?牐?//将TImage实际宽高映射到给定宽高
?牐燬etWindowExtEx(Pic->Canvas->Handle,
?牐燚rawingWidth,
?牐燚rawingHeight,
?牐燦ULL);?牔?
?牐?//设置视口,X轴默认从左到右,Y轴取负,使其方向从下到上
?牐燬etViewportExtEx(Pic->Canvas->Handle,
?牐燩ic->Width,
?牐?-Pic->Height,
?牐燦ULL);?牔?
?牐?//窗口原点的位置,当然用 0,0
?牐燬etWindowOrgEx(Pic->Canvas->Handle,
?牐?0,
?牐?0,
?牐燦ULL);?牐牔?
?牐?//视口原点的位置,就是 TImage 中哪一点和上面的(0,0)对应,需要手工修正
?牐燬etViewportOrgEx(Pic->Canvas->Handle,
?牐燩ic->Width*50.0/150.0
?牐燩ic->Height*20.0/3.0
?牐燦ULL);?牐牔?
?牐?//就是说,我的原点是(0,0),原点距离左边占整个宽的百分比为:50.0/150
?牐?//原点距离上面占整个高的百分比为:20.0/30.0
?牐爙??
?牐犓得鳎夯褂幸坏阕⒁猓饫锏腄rawingWidth DrawingHeight 均为整数,不要给它很小的值,当需要计算小值时,乘以n缩放一下,如计算0~2*PI 的sin值,X:0~2*PI,Y:-1~1,DrawingWidth可以取值为2*PI的100倍:100*2*PI,DrawingHeight可以取1-(-1) 的100:200。
?牐牬翱谠闵柚檬止じ奈?
?牐燬etViewportOrgEx(Pic->Canvas->Handle,
?牐?0,
?牐燩ic->Height*1.0/2.0,
?牐燦ULL);?牐牔?
?牐牭饔煤袷娇赡芪?
?牐燿ouble x,y;??
?牐燬etViewPort(Image1,100*2*3.14159265,200);?牔?
?牐爁or(x=0;x<=2*3.14159265;x+=0.01)??
?牐爗??
?牐爕=sin(x);?牔?
?牐營mage1->Canvas->Pixels[100*x][100*y]=clBlue; //相应点打上颜色
?牐爙??
?牐犠ⅲ阂陨铣绦蛟? C++Builder 5.0中调试通过。??