C# 绘制二维功能等高线图时的视觉伪影(使用FPlot)

C# 绘制二维功能等高线图时的视觉伪影(使用FPlot),c#,.net,math,plot,C#,.net,Math,Plot,因此,我使用开源.NET库进行绘图: 下面是我试图绘制的函数: f(x,y)=x^2+3*y^2+2*x*y 以下是我希望它看起来的样子: 澄清: 我不需要与图像中完全相同的外观,我只需要绘图在数学上是正确的 图片中只有10个圆锥,我需要尽可能多的圆锥才能显示在屏幕上 下面是我如何做到这一点的: var graphFunction = new Function2D(); graphFunction.source = "return (pow(x,2)+3*pow

因此,我使用开源.NET库进行绘图:

下面是我试图绘制的函数: f(x,y)=x^2+3*y^2+2*x*y

以下是我希望它看起来的样子:

澄清:

  • 我不需要与图像中完全相同的外观,我只需要绘图在数学上是正确的
  • 图片中只有10个圆锥,我需要尽可能多的圆锥才能显示在屏幕上
  • 下面是我如何做到这一点的:

            var graphFunction = new Function2D();
            graphFunction.source = "return (pow(x,2)+3*pow(y,2)+2*x*y)/10;"; 
            /* I'm dividing by 10 because otherwise the whole plot is solid color */
            graphFunction.Compile(true);
    
    这就是FPlot生成的绘图近距离显示的方式:

    这正是我想要的,但当我缩小时,会发生以下情况: SE多余的椭圆不应该在那里,事实上它们不在那里,这只是一个图形人工制品,因为当你放大其中一个“假”椭圆时,你会看到:

    问题可能出在这一行:

            graphFunction.source = "return (pow(x,2)+3*pow(y,2)+2*x*y)/10;"; 
    
    …或在FPlot源代码中。有什么想法吗

    更新: 所以,图中的z值似乎是个问题。当一个函数的值z=f(x,y)在一个图中超过z1(max z)时,它会重置为z=z%z1(当z低于z0时也会发生同样的情况),这会导致这些“线”——它们不是我想的倒计时线


    这意味着解决方案是:在屏幕上将z0设置为最小f(x,y),在屏幕上将z1设置为最大f(x,y)。使您的
    FPlotLibrary的显示边框。GraphControl
    在所有3个维度上都具有相同的值,问题消失了:

            graphControl1.x0 = -40;
            graphControl1.x1 = 40;
            graphControl1.y0 = -40;
            graphControl1.y1 = 40;
            graphControl1.z0 = -40;
            graphControl1.z1 = 40;
    

    顺便说一句,如果你这样做,“问题”就会重现

            graphControl1.x0 = -40;
            graphControl1.x1 = 40;
            graphControl1.y0 = -40;
            graphControl1.y1 = 40;
            graphControl1.z0 = -1;
            graphControl1.z1 = 1;
    

    有没有办法打开抗锯齿功能?或者在画布上画4倍的大小,然后缩小它?我试着弄乱了graph的所有属性。它们都没有任何帮助可能是实际线条和显示像素之间的转换,像minecraft这样的游戏在大距离显示重复纹理时也有类似的问题这似乎只是一个平滑函数的数字(离散)显示的人工制品。就是这样,我完全忘记了z比例。非常感谢。