0

グラフ計算機を作成して、グラフを「キャンバス」に正しく表示しようとしています。HTML ファイルを読み込んで x と書くと、たとえば、左上隅から始まり、右下隅に下がっていきます。問題は、グラフが上下逆さまに表示され、負の値が含まれていないことです。キャンバスは左上隅のピクセル値で (0,0) から始まり、右下隅の (300,300) で終わることがわかっています。このリンクから緑のキャンバスのようなものを表示したい: http://www.cse.chalmers.se/edu/course/TDA555/lab4.html

points :: Expr -> Double -> (Int,Int) -> [Point]
points exp scale (x, y) = [(x, realToPix (eval exp (pixToReal x))) | x<-[0..(fromIntegral canWidth)] ]
              where
              pixToReal :: Double -> Double  --converts a pixel x-coordinate to a real x-coordinate
              pixToReal x = x * 0.02
              realToPix :: Double -> Double  --converts a real y-coordinate to a pixel y-coordinate
              realToPix y = y / 0.02
4

1 に答える 1

1

おそらく、正が上になる 2D 座標系での作業に慣れているでしょうyが、HTML キャンバスで指摘したように、正yは下になります。y必要な座標系をシミュレートするには、すべての値を線y=0(別名、x軸)で反転する必要があります。

テストとして使用できるいくつかのy値とそれに対応する修正を次に示します。yすでに適切にスケーリングされていると想定していることに注意してください。すでにその部分を取得しているようです。

  • 150 -> 0
  • 0 -> 150
  • -150 -> 300

パターンはy_new = -(y_old - 150)150 ですcanvas_height/2。したがって、スケーリング後、この式をすべての値に適用する必要がありyます。

軸を中心に移動yするには、適切な線形変換を導出するために同じ種類のことを行う必要があります。

于 2016-10-27T23:36:34.297 に答える