[英]How to implement a grapher in C#
所以我正在寫一個圖形計算器。 到目前為止,我有一個半功能繪圖儀,但是,我很難在准確的圖形和平滑的曲線之間取得良好的平衡。
當前的實現(半偽代碼)看起來像這樣:
for (float i = GraphXMin; i <= GraphXMax; i++)
{
PointF P = new PointF(i, EvaluateFunction(Function, i)
ListOfPoints.Add(P)
}
Graphics.DrawCurve(ListOfPoints)
這樣做的問題是因為它只在每個整數值處添加一個點,當它們的轉折點不落在整數上時(例如sin(x)^2 ),圖形最終會扭曲。
我嘗試將i增加一些較小的值(如 0.1),這可行,但圖形看起來很粗糙。
我正在使用 C# 和 GDI+。 我將 SmoothingMethod 設置為 AntiAlias,所以這不是問題,正如您從第一張圖中看到的那樣。 繪制帶有很多點的曲線是否存在某種問題? 這些點是否應該准確地定位在像素上?
我相信你們中的一些人以前做過非常相似的事情,所以有什么建議嗎? 在此過程中,您對使用漸近線繪制函數有什么建議嗎? 例如 1/x^2
PS我不是在尋找一個可以完成所有這些的庫-我想自己編寫它。
渲染圖形時,您總是會出現舍入錯誤,因為位圖是離散的,而圖形不是。
有幾種應對方式:
使用 WPF 或 Silverlight 等矢量 API 可能會使事情更容易實現。
處理漸近線非常困難。 首先,您必須找到它們,然后跳過該值,以便您可以在圖表中創建“洞”。
好的,我解決了問題。 在繪圖過程中的某個地方,我使用了 int 而不是 float。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.