绘制图形的最佳方法是什么
本文关键字:方法 是什么 最佳 图形 绘制 | 更新日期: 2023-09-27 18:30:42
我正在开发一个图形计算器应用程序,当然,该应用程序的主要功能是显示图形。
现在,这就是我绘制图形的算法的工作方式:我以N
间隔划分绘图画布(其中N
定义了应用程序的设置,默认值约为 700)。对于每个区间,我评估两端的函数,并在两点之间绘制一段。
以下是我发现这种方法的缺点:
- 图形的精度不是很好(例如函数
sin(tan(x))
) - 渲染在较多的间隔内变慢(例如,N 高于 1000)。此外,缩放和导航控件也会受到影响。
那么有没有更好的方法来绘制图形呢?
我正在用 C# (WPF) 编程,但我认为这无关紧要,因为我正在寻找一种算法。
更好的方法是使用自适应间隔大小。也就是说,从相对粗略的间隔开始,比如 20。对于每个间隔,计算间隔结束和中间的函数。如果中间点靠近连接两个端点的线,请绘制一条线,该间隔就完成了。如果没有,请将间隔一分为二,然后用两个较小的间隔重复。
如果间隔太小而没有收敛到一条线,则可能发现了不连续性,不应连接间隔端点。
如果要绘制一些任意函数,则无需编写自己的算法。 使用相关库中的图形控件,请参阅此处并提供必要的数据(x,y cordinates)。
我希望我能帮助你完成这个C++程序片段,这是我几年前使用为mingw编译器移植的原始图形.h制作的。变量名称非常清楚。
void func_gen(char expr[100],float precision,int color)
{
float x=-(xres/2)/(float)zoom_factor;
float max_range=-x;
while(x<=max_range)
{
float y;
y = evalu(expr,x); //user defined function which i used to evaluate ann expression
float xcord=xby2+zoom_factor*x+xshift;
float ycord=yby2-zoom_factor*y+yshift;
if(xcord<=xres && xcord>=0 && ycord>=0 && ycord<=yres)
putpixel(xcord,ycord,color);
x=x+precision;
}
}
当我降低精度值时,这种方法变得非常慢(这实际上增加了绘图:p的精度,对不起菜鸟)
我认为你应该使用DrawPath。该方法使用辅助结构(图形路径),该结构仅在编码时针对任务类型进行了优化。编辑一个小的优化可能是在段的左点评估函数,在最后一个段的接近点评估函数。