// Math2Disp module Ver.0.10 by fujidig #module Math2Disp #deffunc _init@Math2Disp xSize = 32 ySize = -32 xPos = ginfo_sx / 2 yPos = ginfo_sy / 2 return // 1マスあたりのピクセルを設定 #deffunc m2d_SetSize double x, double y if( ( x == 0.0 ) || ( y == 0.0 ) ) { return 1 // エラー } xSize = x ySize = -y return 0 // 1マスあたりのピクセルを取得 #defcfunc m2d_GetSizeX return xSize #defcfunc m2d_GetSizeY return ySize // 原点の位置(ピクセル)を指定 #deffunc m2d_SetOrgPos double x, double y xPos = x yPos = y return // 原点の位置(ピクセル)を取得 #defcfunc m2d_GetOrgPosX return xPos #defcfunc m2d_GetOrgPosY return yPos // 数学座標からディスプレイ座標を取得 #defcfunc m2d_GetDispX double x return xPos + xSize * x #defcfunc m2d_GetDispY double y return yPos + ySize * y // ディスプレイ座標から数学座標を取得 #defcfunc m2d_GetMathX double x return ( x - xPos ) / xSize #defcfunc m2d_GetMathY double Y return ( y - yPos ) / ySize // 画面端の数学座標 #deffunc m2d_GetEdgeMathX var minMathX, var maxMathX, local MathXDispLeft, local MathXDispRight MathXDispLeft = m2d_GetMathX( 0 ) MathXDispRight = m2d_GetMathX( ginfo_sx - 1 ) if ( MathXDispRight > MathXDispLeft ) { minMathX = MathXDispLeft maxMathX = MathXDispRight } else { minMathX = MathXDispRight maxMathX = MathXDispLeft } return #deffunc m2d_GetEdgeMathY var minMathY, var maxMathY, local MathXDispTop, local MathXDispBottom MathXDispTop = m2d_GetMathY( 0 ) MathXDispBottom = m2d_GetMathY( ginfo_sy - 1 ) if ( MathXDispBottom > MathXDispTop ) { minMathY = MathXDispTop maxMathY = MathXDispBottom } else { minMathY = MathXDispBottom maxMathY = MathXDispTop } return // グリッドを描画する #deffunc drawGridX@Math2Disp local mathX, local mathXInc, local mathEndX, local dispX, local dispXInc m2d_GetEdgeMathX mathX, mathEndX mathX = double( int( mathX ) ) mathXInc = 1.0 dispX = m2d_GetDispX( mathX ) dispXInc = xSize * mathXInc repeat if ( mathX == 0.0 ) { color } else { color 224, 224, 224 } line dispX, ginfo_sy, dispX, 0 if( mathX > mathEndX ) { break } mathX += mathXInc dispX += dispXInc loop return #deffunc drawGridY@Math2Disp local mathY, local mathYInc, local mathEndY, local dispY, local dispYInc m2d_GetEdgeMathY mathY, mathEndY mathY = double( int( mathY ) ) mathYInc = 1.0 dispY = m2d_GetDispY( mathY ) dispYInc = ySize * mathYInc repeat if ( mathY == 0.0 ) { color } else { color 224, 224, 224 } line ginfo_sx, dispY, 0, dispY if( mathY > mathEndY ) { break } mathY += mathYInc dispY += dispYInc loop return #deffunc m2d_DrawGrid drawGridX drawGridY return #global _init@Math2Disp