首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >算法2D参照引导法

算法2D参照引导法
EN

Stack Overflow用户
提问于 2008-12-05 11:13:57
回答 3查看 160关注 0票数 1

我正在尝试构建一个函数图示器,

用户输入xmin、xmax、ymin、ymax、function。我得到了所有点的x,y。

现在,我想将这个初始引用转换为从0,0到250,250的画布。

有没有捷径,还是我应该查一查

代码语言:javascript
复制
if x < 0 
new x = (x - xmin) * (250 / (xmax - xmin)) ?

等等。

此外,这种基本方法并不能优化采样。例如,如果我的函数f(x) =5,我不需要对500个点的xrange进行采样,我只需要两个点。我可以做一些启发式的检查。

但是对于像sin(2/x)这样的函数,我需要在x (-1,1)附近进行更多的采样,你怎么能得到这样的结果呢?

谢谢

EN

回答 3

Stack Overflow用户

发布于 2008-12-05 17:39:30

不是在原始坐标中迭代x,而是在画布上迭代,然后转换回原始坐标:

代码语言:javascript
复制
for (int xcanvas = 0; xcanvas <= 250; i++) {
    double x = ((xmax - xmin) * xcanvas / 250.0) + xmin;
    double y = f(x);

    int ycanvas = 250 * (y - ymin) / (ymax - ymin) + .5;

    // Plot (xcanvas, ycanvas)
}

这将为画布的每一列提供一个函数求值。

票数 1
EN

Stack Overflow用户

发布于 2008-12-05 12:40:16

  1. ,你可以估计导数(如果你有导数)。
  2. 您可以使用双向(二分法)方法:估计差异并在必要时拆分数据段。
票数 0
EN

Stack Overflow用户

发布于 2008-12-05 13:08:25

我想我会从从画布到数学上下文的转换的角度来推理这一点。

代码语言:javascript
复制
(canvas_x, canvas_y) -> (maths_x, maths_y)
(maths_x, maths_y)   -> (canvas_x, canvas_y)

maths_x -> maths_y

您可以遍历可显示的点,循环遍历canvas_x。

这将转化为一些简单的函数:

代码语言:javascript
复制
maths_x = maths_x_from_canvas_x(canvas_x, min_maths_x, max_maths_x)
maths_y = maths_y_from_maths_x(maths_x) # this is the function to be plotted.
canvas_y = canvas_y_from_maths_y(maths_y, min_maths_y, max_maths_y)

if (canvas_y not out of bounds) plot(canvas_x, canvas_y)

在这里,将这些简单的函数编写到代码中是相对简单的。

从这里优化。

我认为对于这种方法,您不需要了解太多关于采样频率的信息,因为您以适合显示的速率进行采样。这并不是最优的--您的y = 5示例就是一个很好的示例,但是可以保证您的样本不会超过您所能显示的数量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/343533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档