2013-02-01 91 views
0

我在x,y,z中有一個數據文件,並且想要使用這些數據繪製3D錐體。我試過了,但它只給出了最後一個點圈。我的數據文件是格式如下:使用用戶數據文件的gnuplot繪製3D錐體

X y z 
0 18 18 
10 59 59  
20 80 80 

任何幫助表示讚賞。

在此先感謝 -Abhi

+1

這真的是你的數據文件格式嗎? (空行是否真的存在?) – mgilson

+0

數據文件中沒有空行...對於遲到的回覆對不起 - Abhi – Abhi

+0

我已更新您的問題以反映數據的實際外觀。如果我錯誤地做了任何事情,請隨意編輯它以糾正。作爲一個附註,您可能想要添加一些關於如何生成數據文件或其內容的更多解釋。事實上,僅僅從3點就很難解釋任何事情。 – mgilson

回答

1

在這一點上,我認爲這可能是更容易顯示可用於生成的格式數據的gnuplot可以用它來繪製一個圓錐體的簡單腳本:

我將使用python有兩個原因。首先,我知道它非常好,其次,它看起來很像僞代碼,所以即使你不知道python也應該很清楚發生了什麼。

import math 
h = 2 
points_u = map(float,range(-h,h+1)) #[-2.,-1.,0.,1.,2.] 

NTHETA = 12 #number of points in theta for the cone 
dtheta = 2.*math.pi/NTHETA 
points_theta = [dtheta*i for i in range(NTHETA+1)] #list of points in theta 

with open('data.txt','w') as fout: #open an output file for the data 
    for theta in points_theta: 
     for u in points_u: 
      #This is how to plot a cone parametrically 
      #Here I unravel the cone into it's x-y-z components 
      #The important part is that within the inner loop, 
      #we're writing data along a single theta. In other words, 
      #within the inner loop, we write a single straight line which 
      #is on the surface of the cone. 
      x = (h-u)/h*math.cos(theta) 
      y = (h-u)/h*math.sin(theta) 
      z = u 
      fout.write('%f %f %f\n'%(x,y,z)) 

     #After the inner loop, you need to insert a blank line to let gnuplot know 
     #that the particular "scan" is over and it is supposed to start a new "scan" 
     #After all is said and done, gnuplot will connect the points. 
     fout.write('\n') 

現在這生成一個數據文件data.txt。要在gnuplot中繪製這個數據文件,你可以簡單地做:

set surface 
#set hidden3d #This makes the object "non-transparent" 
splot 'data.txt' using 1:2:3 with lines