- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我必须使用 OCaml 语言实现一个简单的 2D 函数绘图仪。我大致了解了。到目前为止,策略是有一个函数,我们称之为绘图,它最终将给定的输入函数 f 映射到 f 的可视化。到目前为止,我认为可视化是一条曲线,它是一组顶点,其 x 和 y 坐标如下,x 沿水平轴变化,y 是 f(x) 的值。第一步是计算顶点的 并将其存储在某处,然后继续绘制每个点。只是,出于可视化目的,这是需要计算大量信息的方法,并会引发几个问题:我们将使用什么比率,x 可以有多少个值,将计算多少顶点以及我们需要绘制多少顶点实际曲线?所以我对绘制函数曲线的适当策略有点迷失。有人可以给我一些想法或简单的模板,以便我可以详细说明吗?或者给定函数的示例,例如 x^2。
这是我使用 lablgl 和 GLUT 生成的一些代码,因为我也打算实现 3D 绘图仪,它绘制函数 f(x) = sin(x*10)/(1+x^2)。
open Gl;;
open GlMat;;
open GlDraw;;
open GlClear;;
open Glut;;
(* Transform RGB values in [0.0 - 1.0] to use it with OpenGL *)
let oc = function
x -> float x /. 255.
;;
(* The function to be graphed *)
let expression = function
x -> sin (10. *. x) /. (1. +. x *. x)
;;
(* The rendering function drawing 2000 points in 400x400 canvas *)
let display () =
GlClear.color (oc 255, oc 255,oc 255);
clear [`color];
load_identity ();
begins `lines;
GlDraw.color (oc 0, oc 0, oc 0);
List.iter vertex2 [-1.,0.; 1.,0.];
List.iter vertex2 [0.,-1.;0.,1.];
ends ();
begins `points;
for i=0 to 2000 do
let x = (float i -. 1000.) /. 400. in
let y = expression (x) in
vertex2 (x,y);
done;
ends ();
swapBuffers ();
flush();
;;
(* general stuff and main loop *)
let () =
ignore (init Sys.argv);
initWindowSize ~w:400 ~h:400;
initDisplayMode ~double_buffer:true ();
ignore (createWindow ~title:"Sin(x*10)/(1+x^2)");
mode `modelview;
displayFunc ~cb:display;
idleFunc ~cb:(Some postRedisplay);
keyboardFunc ~cb:(fun ~key ~x ~y -> if key=27 then exit 0);
mainLoop ()
;;
提前谢谢大家!
最佳答案
没有简单的方法来自动选择 X 和 Y 的范围,因为这强烈依赖于函数,并且需要真正理解函数行为。 (这在很大程度上也是主观的。)
因此,最简单的方法是将其保留为用户可调整的参数,并具有合适的默认值(例如 [-5,5]x[-5,5])。
一个重要的问题是纵横比:您将在称为视口(viewport)的矩形中绘图;如果该矩形边的比率与函数(称为窗口)的 X 和 Y 范围的比率不匹配,则曲线将变形。圆形将显示为椭圆形。
根据具体情况,确保长宽比相等是否重要。您应该将其保留为用户选项。如果是,您的软件应该调整窗口限制以适应。
关于点密度,可以使用以下策略:水平选择固定数量的点(比如 100)。通过这样的步骤,线段就清晰可辨了。然后,您可以使用递归分割过程来获得平滑的绘图:考虑一条线段,计算端点的中间点并评估真实曲线点到线段的距离。如果超过阈值,则将该段分成两半,并对两半重复。请务必在转换为视口(viewport)坐标后执行计算,以便所有值都以像素为单位。
关于graphics - 如何实现函数绘图仪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34383932/
我正在用Python 做一个ascii 问题。目标是使用特定值创建特定图像来创建图像: 值 0 创建一个“-”并将光标向右移动到下一个变量。 1 创建一个“/”并将光标向上移动一行并向右移动。 2 创
我正在修复 Java 代码(Windows 32)中的一些打印(绘图仪)问题。 纸张为 50 米卷,装载到绘图仪上。纸张“宽”为 36 英寸。我正在打印 36 英寸 x 108 英寸的图像。当我打印时
已关闭。此问题旨在寻求有关书籍、工具、软件库等的建议。不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以
我需要将任意文本转换为 HPGL(HP 图形语言)中定义的一组 vector 坐标,以便能够使用激光打印,如果可能的话使用 C/C++。 我可以使用任何使这项任务更容易的字体。 我找到了将字形轮廓转换
我是一名优秀的程序员,十分优秀!