DXライブラリ用描画関数ラッパー。
基本的にはDrawRotaGraphと同じだが、縦と横の拡大率を別々に指定可能。
typedef struct VECTOR2D{ double x,y; } VECTOR2D; /* DrawExRotaGraph */ void DrawExRotaGraph(double ex, double ey, double xScale, double yScale, double Angle, int GrHandle, int TransFlag, int TurnFlag) { int gx,gy; double ix,iy,ca=cos(Angle),sa=sin(Angle); GetGraphSize(GrHandle,&gx,&gy); gx*=xScale/2; gy*=yScale/2; VECTOR2D pos[4] = { { -gx, -gy}, { +gx, -gy}, { +gx, +gy}, { -gx, +gy} }; for (int i=0;i<4;i++) { ix = pos[i].x*ca - pos[i].y*sa; iy = pos[i].x*sa + pos[i].y*ca; pos[i].x=ix+ex; pos[i].y=iy+ey; } if (!TurnFlag) DrawModiGraph((int)pos[0].x, (int)pos[0].y, (int)pos[1].x, (int)pos[1].y, (int)pos[2].x, (int)pos[2].y, (int)pos[3].x, (int)pos[3].y, GrHandle, TransFlag); else DrawModiGraph((int)pos[1].x, (int)pos[1].y, (int)pos[0].x, (int)pos[0].y, (int)pos[3].x, (int)pos[3].y, (int)pos[2].x, (int)pos[2].y, GrHandle, TransFlag); }
まず、グラフィックのサイズを取得。
グラフィックの左上、右上、右下、左下の点を取得し、拡大縮小を適応した後、なんとか定理で傾ける。
後はDrawModiGraphで描画。TurnFlagがONの時は描画する点の左右をさかさまにする。以上。