我正在使用.NET Compact並創建日誌比例。我現在有一個List,它包含要繪製的值,然後將其轉換爲Points數組,然後Graphics.DrawLines()方法將採用它們並在每個點之間繪製一條線。但是,正如你可以想象的那樣,這看起來可能是參差不齊和不穩定的。由於.NET Compact沒有Graphics.DrawCurve()方法等,我想知道是否有人知道在模擬曲線圖的點之間創建點的好方法?理想情況下,可以創建可能出現在點之間的樣條上的點。在.NET Compact中模擬曲線圖
2
A
回答
0
嗯,我不能說我花時間去了解並理解正在發生的一切背後的數學,但是我能夠在a VB forum上找到一篇文章,將樣條分成多個部分劇情。
我採取了一種破解方式來處理代碼,以便將其移植到C#for Windows Mobile。
它編譯,但我不知道如何處理它。
private void Spline(Graphics g, Pen pen, Point[] points, double tx) {
int arrayLength = points.Length;
int max = arrayLength - 4;
if (3 < arrayLength) {
for (int i = 0; i < arrayLength; i++) {
int n1, n2, n3, n4;
if (i == 0) {
n1 = i + 0;
n2 = i + 0;
n3 = i + 1;
n4 = i + 2;
} else if (i < max) {
n1 = i + 0;
n2 = i + 1;
n3 = i + 2;
n4 = i + 3;
} else {
n1 = max + 1;
n2 = max + 2;
n3 = max + 3;
n4 = max + 3;
}
Segment(g, pen, points[n1], points[n2], points[n3], points[n4], tx);
}
}
}
private void Segment(Graphics g, Pen pen, Point pt0, Point pt1, Point pt2, Point pt3, double tx) {
int pointCount = 4;
double sx1 = tx * (pt2.X - pt0.X);
double sy1 = tx * (pt2.Y - pt0.Y);
double sx2 = tx * (pt3.X - pt1.X);
double xy2 = tx * (pt3.Y = pt2.Y);
double a1 = sx1 + sx2 + 2 * pt1.X - 2 * pt2.X;
double a2 = sy1 + xy2 + 2 * pt2.Y - 2 * pt2.Y;
double b1 = -2 * sx1 - sx2 - 3 * pt1.X + 3 * pt2.X;
double b2 = -2 * sy1 - xy2 - 3 * pt1.Y + 3 * pt2.Y;
double c1 = sx1;
double c2 = sy1;
double d1 = pt1.X;
double d2 = pt1.Y;
for (int i = 0; i < pointCount; i++) {
double x = (double)i/pointCount;
double xSq = x * x; // x^2
double xCu = x * xSq; // x^3
double f1 = a1 * xCu + b1 * xSq + c1 * x + d1; // f(x) = A x^3 + B x^2 + C x + D
double f2 = a2 * xCu + b2 * xSq + c2 * x + d2; // f(x) = A x^3 + B x^2 + C x + D
double dx = Math.Floor(f1);
double dy = Math.Floor(f2);
g.DrawRectangle(pen, (int)dx, (int)dy, 1, 1); // calculated points
}
g.DrawRectangle(pen, pt0.X, pt0.Y, 1, 1); // original point
}
我不知道什麼值建議你double tx
。你只需要玩這個。
這可能會給你一些里程,但我真的不知道這是否會爲你增加點數......除非你編輯代碼以包含一些中點。
一旦你解決問題,編輯你的文章與最終結果的幾個屏幕截圖(如果你不介意)。
+0
這個答案絕對精彩。我很確定我可以用它作爲解決問題的基礎。我被要求少關注它,並將其留到項目結束時作爲「很高興」,但如果完成,我一定會更新你。 – MrShoes 2012-08-17 14:43:30
0
然後你想看看實現一些你自己的圖形方法。根據您想要的確切結果,您可以使用各種現有和有據可查的方法。在通用計算機圖形和在線的書籍中都可以找到很多。例如,請參閱堆棧溢出文章下面的鏈接,一個例子作爲出發點:
相關問題
- 1. 如何在.NET Compact Framework中模擬ErrorProvider?
- 2. 在matlab中模擬正弦曲線圖
- 3. 曲線擬合
- 4. 如何從圖像中模擬貝塞爾曲線?
- 5. OpenCV中的曲線擬合
- 6. LabView中的曲線擬合
- 7. PHP中的曲線擬合
- 8. 擬合曲線,另一條曲線
- 9. 曲線擬合普朗克曲線
- 10. lowess擬合曲線在R
- 11. 問題ROC曲線SVM模擬數據
- 12. Python多曲線擬合模型
- 13. 擬合曲線與模型方程numpy
- 14. 模擬Gompertz曲線的數據
- 15. Spotfire曲線擬合
- 16. Python曲線擬合
- 17. 曲線擬合scipy
- 18. scipy.optimize曲線擬合
- 19. python曲線擬合
- 20. 是否有任何支持.NET Compact Framework的模擬庫
- 21. 用lsq曲線擬合加權曲線擬合
- 22. 繪圖應用程序 - 曲線擬合
- 23. 擬合曲線到分割圖像
- 24. 將曲線擬合到直方圖
- 25. 在matlab中擬合二維曲線
- 26. 在Python II中擬合高斯曲線
- 27. 圖像分析曲線擬合
- 28. 曲線擬合,以散點圖
- 29. 繪圖曲線擬合誤差帶
- 30. NET模擬NodeMouseClick樹狀圖
你問「如何找到一個符合您的數據點功能?」 – jp2code 2012-08-15 18:43:44
不......我有創建鋸齒圖的點。我在問如何添加更多點來軟化點,基本上覆制了Graphics.DrawCurve()在提供Point數組時所做的操作,這些數據不幸遺失了.NET Compact Framework。由於屏幕顯示非常小,即使在每個點之間只有2個額外的點,也沒關係。 – MrShoes 2012-08-16 07:46:05
如果您不擔心圖形是否精確,則可以使用某種帶有更多控制點的插值(例如cos)。 – ssube 2012-08-16 15:00:24