我期待acceive創建一個類似的3D繪圖:如何在gnuplot的splot中填充曲線和除zmin以外的其他任何內容?
z^**
| *
| *** **
| * *###*
| * *######** * ***
| * ****###########*#####
| ###*######################
,-----------------------------------------> y
///////////
/---0---0---0---1---1---1---0---0---0---0 1
///////////
/---0---0---0---0---1---1---1---0---0---0 2
///////////
/---0---0---0---0---0---1---1---1---1---0 3
///////////
/---0---0---0---0---0---0---0---1---1---1 4
x v 1 2 3 4 5 6 7 8 9 10
即功能g(x,y)
的y
依賴的表面/輪廓圖,且在y
二維函數f(y)
- - 一個x
的3D圖這是充滿如果g(x,y) > 0
z
平面...使用的gnuplot的filledcurves選項
我的方法是,但我無法完全正確地做到。
在2D情節,你可以做的是(例如用f = sin(x)
,g = -0.5
)這一點:
plot '+' u 1:(($1)>0?sin($1):-1/0) w filledcurves above y1=-0.5
xMIN = -1.5
xMAX = 0.5
yMIN = -0.5
yMAX = 1.5
zMIN = -4
zMAX = 8
set isosamples 100
set xyplane at 0
set xrange [xMIN:xMAX]
set yrange [yMIN:yMAX]
set zrange [zMIN:zMAX]
f(x) = 3*sin(3*x)+x**2
g(x,y) = -6*x**2 -12*y**2 - 8*x*y + 6*y+ 2
max(a,b) = a>b?a:1/0
set hidden
set view 45
splot max(g(x,y),0), \
'++' u 1:(1.5):(f($1)) w l, \
'' u 1:(1.5):(g(($1),($2)) > 0 ? f($1) : -1/0) w filledcurves
結果:
這幾乎是我想要的,但填充總是一直進行到zMIN,但我想指定例如它遮住,直到0或曲線: 最後一行之後添加above y1=0
給我:
"3D.gpl", line 22: unexpected or unrecognized token
此外,指定如
...:(-0) w filledcurves
第四數據字段作爲將在2D情況下工作,只是改變了這裏的顏色,所以設置第二個曲線,直到填充似乎不可能...
我看過this問題以及this博客文章上gnuplotting,但無論是答案和帖子似乎有相同的問題:默認情況下,它們都會填充到zmin。
我還是設法一些修補後acceive是這樣的:
這裏我使用的是事實,有域中點這g(x,y\') > 0
和其他g(x,y\'\') ≤ 0
任何x
。 這將導致一個非常哈克解決方案,但:
要使它足夠密集,你必須修改採樣率,影響G的表面圖,以及...其實只需設置一個非常高採樣率似乎完全崩潰,我只會看到它的一部分!由於「填充」現在有效地是一個表面圖被壓縮到一個二維平面中,所以您可以通過設置
set hidden3d offset 0
來防止這種情況,但是這個選項是全局的,並且適用於其他任何其他的你可能實際上不想要它的表面...
這將是有趣的,看看是否有更嚴格的解決方案!
這是一個良好的第一步,但相信這仍只允許「填充」來完成,直到固定的軸線,在此情況下'Z = 0'。由於爲了我自己的目的,這個解決方案工作得很好,我接受了這個答案,但是,知道是否有替代方案填充兩條具有相同參數化或相似參數的任意曲線是很好的。 – mrclng