2016-10-27 5 views
0

グラフの電卓を作成し、グラフを「キャンバス」に正しく表示しようとしています。 HTMLファイルを読み込んでxと書くと、左上隅から開始し、右下隅に移動します。だから問題は、グラフを上下逆に表示し、負の値を含まないことです。 私は、キャンバスが左上隅のピクセル値で(0,0)から始まり、右下隅に(300,300)で終わることを知っています。あなたはおそらく、2Dでの作業に慣れている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 

答えて

1

yがアップしていますが、HTMLキャンバスに述べたように、正yがダウンした場所の座標系:私は、このリンクから緑のキャンバスのようなものを表示したいです。必要な座標系をシミュレートするには、y=0(別名x軸)のすべてのy値を反転する必要があります。

ここには、yの値とテストに使用できる修正がいくつかあります。私はyが既に適切に拡大縮小されていると仮定しています。あなたはすでにその部分を持っているように見えます。

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

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

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

+0

ありがとうございます。 y軸は正しく移動しましたが、x = x * 0.02 -150を適用すると、y軸は中心にずれることなく消えます。 –

+0

ああ、私の間違い。それを指摘してくれてありがとう。私はポストから編集しました。 –

+0

問題はありません、助けてくれてありがとう。 x =(x - ((fromIntegral y)/ 2))*スケールが正しく機能することが判明しました。 –

関連する問題