gpt4 book ai didi

graph - 简单的二维图形绘制 - PostScript

转载 作者:行者123 更新时间:2023-12-02 00:01:59 26 4
gpt4 key购买 nike

你能告诉我一个用PS格式绘制graph(2+x, sin(x), cos(x+3)/3......)的简单方法吗?

例如,我想绘制f(x) = 2+x,具有以下值:

Table of values: 
Value of X = -5 | -4 | -3 | -2 | -1 | -0 | 1 .....
Value of Y = -3 | -2 | -1 | 0 | 1 | 2 | 3 .....

这个图怎么画?绘制线图、绘制多边形或使用曲线命令?您认为最好的解决方案是什么?

最佳答案

您可以通过多种不同的方式执行此操作。如果要绘制一组坐标,可以将它们放在一个数组中,并在遍历数组时绘制点。

/XValues [ -5 -4 -3 -2 -1 0 1 ] def  % eg. XValues 0 get ==> -5
/YValues [ -3 -2 -1 0 1 2 3 ] def % YValues 0 get ==> -3

XValues 0 get YValues 0 get % X[0] Y[0]
moveto % move to first point
1 1 XValues length 1 sub { % i push integer i = 1 .. length(XValues)-1 on each iteration
XValues % i XVal push X array
1 index % i XVal i copy i from stack
get % i x get ith X value from array
YValues % i x YVal
2 index % i x YVal i i is 1 position deeper now, so 2 index instead of 1
get % i x y
lineto % i line to next point
pop % discard index variable
} for

当然,在 Postscript 中原点默认位于左下角,72 点等于 1 英寸。所以这些值(-5、-4、-2 等)甚至都不会显示。因此,您通常希望从平移到要绘制图形的中心开始。

/Center { 300 400 } def  % roughly the middle of US letter-size paper
Center translate

然后您想要缩放坐标系以使图形特征可见。比例因子 = DesiredSize/ExistingSize。

您可以扫描数据集以查找现有 大小。

/Xmin 1000000 def  % really high
/Xmax -1000000 def % really low
XValues { % x forall pushes each X value
dup Xmin lt { % x lower than Xmin?
dup /Xmin exch def % x set Xmin
} if % x
dup Xmax gt { % x higher than Xmax?
/Xmax exch def % set Xmax
}{ % x else (lower than Xmax)
pop % discard X value
} ifelse
} forall
/Datasize Xmax Xmin sub def % X size is (Xmax-Xmin)

6 72 mul DataSize div % scalefactor 6*72/(Xmax-Xmin)
dup % scalefactor scalefactor use same scaling for x and y
scale

但是当你画线时会遇到一个障碍。您绘制的线条的宽度还取决于当前的坐标空间,因此如果您将空间放大一个很大的比例,您的线条将变得不理想的宽。您可以描述路径但调用笔画之前缩小回正常空间。 或者,在缩放的同时固定线宽。

因为我们知道我们增加了多少线宽(它是相同的比例因子),我们可以在反方向调整线宽图形参数。

1                       %                   push 1 for division
6 72 mul DataSize div % 1 scalefactor 6*72/(Xmax-Xmin)
dup dup % 1 scalefactor scalefactor scalefactor
scale % 1 scalefactor
div % 1/scalefactor
currentlinewidth mul setlinewidth % adjust line width

现在,由于这是一个函数的图表,我们实际上不需要值表。我们可以通过评估函数即时计算值。

/func { 3 add cos 3 div } def  % f(x) = cos(3+x)/3    define function y=f(x)

/Xini -5 def % named loop control parameters
/Xfin 1 def
/Xstep 1 def
Xini dup dup func moveto % moveto first point
Xstep add Xstep Xfin { % x
dup % x x
func % x f(x)
lineto % line to next point
} for
stroke

最后,如果您可以对函数求导(创建一个函数来计算原始函数在每个点的斜率),那么您可以使用my answer over on TeX.SE用许多曲线段而不是直线绘制图形。

关于graph - 简单的二维图形绘制 - PostScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20816026/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com