Има ли несъответствие между координатите на splot и стрелката в gnuplot или пропускам нещо?

Опитвам се да начертая следните 3 пресичащи се равнини:

x + 2y + 4z = 7

2x + 3y + 3z = 1

3x + 7y + 2z = -11

За да добавя акцент, исках да включа няколко стрелки без глава по протежение на пресечната точка на всяка двойка равнини и малка сфера, за да обозначя точката на пресичане. Но по някаква причина самите самолети изглежда не са подравнени с осите. От уравненията мога лесно да намеря координатите на пресечната точка, да намеря координатите на ръбовете на правите, които минават по пресечната точка на всяка двойка равнини и, ако е необходимо, да намеря параметричното уравнение на правите. Но досега, когато начертавам линиите като стрелки от краищата на моя график или пресечната точка като кръг, равнините изглеждат неправилно позиционирани в координатите. Виждам, че кръгът или линиите са позиционирани правилно, но самите равнини изглеждат разместени. На какво може да се дължи това? Грешно ли въвеждам уравненията? Може би изместването на равнината xy движи нещата? Мисля, че трябва да е нещо очевидно, което просто не виждам. Намирам го за доста озадачаващо.

reset

samps = 500

set samples samps,samps
set isosamples samps,samps

f(x,y) = 7/4 - x/4 - y/2
set table $Data01
   splot f(x,y)
unset table

g(x,y) =  1/3 - 2/3*x - y
set table $Data02
   splot g(x,y)
unset table

h(x,y) = -11/2 - 3/2*x - 7/2*y
set table $Data03
   splot h(x,y)
unset table

Zmin = 1.0
Zmax = 3.5

set xrange [-1.2:0.5]
set yrange [-4:0]
set zrange [Zmin:Zmax]
set hidden3d

set xlabel 'x'
set ylabel 'y'
set zlabel 'z'

set xyplane at Zmin
unset xzeroaxis
unset yzeroaxis
unset zzeroaxis

set border 1023-128
set xtics out nomirror
set ytics out nomirror
set ztics out
#set xtics add ('' -4)

Frac(z) = (z - Zmin) / (Zmax - Zmin)

#MyPalette01
Red01(z) = 0
Green01(z) = 255*256
Blue01(z) = int(255*Frac(z))
MyPalette01(z) = Red01(z) + Green01(z) + Blue01(z)

#MyPalette02
Red02(z) = 255*256*256
Green02(z) = int(165*Frac(z))*256
Blue02(z) = 0
MyPalette02(z) = Red02(z) + Green02(z) + Blue02(z)

# MyPalette03
Red03(z)   = int(-95*Frac(z)+255)*256*256
Green03(z) = int(32*Frac(z))*256
Blue03(z)  = int(-15*Frac(z)+255)
MyPalette03(z) =  Red03(z) + Green03(z) + Blue03(z) 

#Red03(z)   = int(255*Frac(z))*256*256
#Green03(z) = int(255*Frac(z))*256
#Blue03(z)  = int(255*Frac(z))

set object circle at -1,-2,3 size 0.05 front
unset key

set pm3d
set pm3d lighting primary 0.5 specular 0.6
set pm3d ftriangles
set style fill transparent solid 0.75 noborder
set pm3d depthorder
unset colorbox

set view 68, 126

splot $Data01 u 1:2:3:(MyPalette01($3)) w l lc rgb var notitle, \
      $Data02 u 1:2:3:(MyPalette02($3)) w l lc rgb var notitle, \
      $Data03 u 1:2:3:(MyPalette03($3)) w l lc rgb var notitle

Намерих как да задам няколко стила за всяка равнина тук: Gnuplot 5.2 splot: Множество pm3d палитри в едно извикване на графика

И ето как изглежда:

Някакви идеи?Странни самолети


person Ottmar Schaub    schedule 27.12.2020    source източник
comment
Не забравяйте, че gnuplot използва целочислена аритметика. Така че 1/3 = 0 и 11/2 = 5 и т.н. Поставете десетични точки след вашите (цяло число) числови константи, за да наложите аритметика с плаваща запетая. 1./3. = 0,3333 11./2/ = 5,5 и така нататък.   -  person Ethan    schedule 28.12.2020
comment
Трябваше да се сетя, като направих същата грешка във Fortran. Благословена е душата ти. Знаех, че ще е нещо просто.   -  person Ottmar Schaub    schedule 28.12.2020