- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个包含 3 列定义 3D 点的文本文件。
我想绘制 3D 中的每个点和以每个点为中心的椭圆体。我放弃使用
set parametric
因为我需要迭代我的文本文件。
所以我想在做这样的事情时:
gnuplot
reset
set xrange [-5:5]
set yrange [-5:5]
set zrange [-5:5]
Rx = 1
Ry = 1
Rz = 1
fx(u,v) = column(2) + Rx*cos(u)*cos(v)
fy(u,v) = column(1) + Ry*sin(u)*cos(v)
fz(u,v) = column(3) + Rz*sin(v)
iMax = 200
splot "file.txt" using ($2):($1):($3) title "Input " with points ps 2 pt 7,\
for [i=0:iMax] "file.txt" u (fx(2*pi*i/iMax, pi*i/iMax)):(fy(2*pi*i/iMax, pi*i/iMax)):(fz(2*pi*i/iMax, pi*i/iMax)) notitle with points ps 2 pt 7
但我唯一能想到的是这种奇怪而沉重的模式(我知道它们每行有很多迭代,但也许还有另一种方法)模式
有什么帮助吗?谢谢。
数学观点有问题?使用这样的东西我完全能够绘制球体,但无需解析数据:
set parametric
R = 1
set urange [-pi/2:pi/2]
set vrange [0:2*pi]
splot R*cos(u)*cos(v),R*cos(u)*sin(v),R*sin(u) w l lc rgb "yellow"
最佳答案
我假设您想要绘制 3D 椭球体的 2D 表面。但是 plot 命令只有 i
上的一个循环,它只有一维。这不能给出二维表面。嵌套另一个一维循环可能会使这种方法起作用。
我会建议别的东西。在绘图之前,您可以将中心坐标存储到 gnuplot 数组中。然后你遍历这个数组并使用参数模式绘制一个球体/椭圆体。
这可能是一个起点:
# This is the file with the center coordinates.
datafile = "ellipses.dat"
# The "stats" command stores the number of rows in the STATS_records variable.
stats datafile nooutput
num_rows = STATS_records
# Generate arrays which will contain the center coordinates of the ellipsoids.
array centers_x[num_rows]
array centers_y[num_rows]
array centers_z[num_rows]
# Read the center coordinates into the prepared arrays.
# I "misuse" the stats command. The "using" expression in parenthesis executes
# the respective commands and returns the value after the last comma: row + 1.
# This return value is not needed anywhere.
row = 1
stats datafile using (centers_x[row]=$1, \
centers_y[row]=$2, \
centers_z[row]=$3, \
row = row + 1) nooutput
# Output into an image file.
set terminal pngcairo
set output "ellipsoids.png"
# Set parameters for ellipsoids.
Rx = 0.1
Ry = 0.1
Rz = 0.7
# Use parametric mode for plotting.
set parametric
set urange [-pi/2:pi/2]
set vrange [0:2*pi]
# Finally plot:
splot datafile using 1:2:3 title "Input " with points ps 2 pt 7, \
for [i=1:num_rows] centers_x[i] + Rx*cos(u)*cos(v), \
centers_y[i] + Ry*cos(u)*sin(v), \
centers_z[i] + Rz*sin(u) notitle
请仔细检查 x、y 和 z:我没有那么仔细。这是结果:
我使用了这个示例数据:
1 2 3
2 2 4
2 3 4
3 3 3
3 4 5
数组从 gnuplot 5.2 开始可用。对于旧版本,请在互联网上搜索解决方法。
关于linux - 带有文本文件中心的 Gnuplot 椭圆体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58169825/
我有一个包含 3 列定义 3D 点的文本文件。 我想绘制 3D 中的每个点和以每个点为中心的椭圆体。我放弃使用 set parametric 因为我需要迭代我的文本文件。 所以我想在做这样的事情时:
假设我们在 2D(或 3D)中获取随机点,这些点往往位于椭圆(或椭圆体)上。我们不能保证点均匀分布在 ellipse(椭球面)上。 任务是确定椭圆(椭圆体)参数,即中心位置和半轴。 我们不能取平均值,
我有一个 3D 椭球函数: ellipsoid <- function(center=c(0, 0, 0), radius=1, shape=diag(3), segments=51) {
我是一名优秀的程序员,十分优秀!