我正在使用.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