enthought / mayavi

3D visualization of scientific data in Python
http://docs.enthought.com/mayavi/mayavi/
Other
1.28k stars 282 forks source link

Mayavi, clip planes #1269

Open priisdk opened 11 months ago

priisdk commented 11 months ago

In the program below I try to put a section of the earth (ocean), a tower (of a wind turbine) at origo, and the Sun. My final goal is to animate the sunset as seen from some hundred meters behind the tower - and with the real curvature of the Earth.

When zooming in the nearest objects seem to disappear too early - as if there was a 'near clip plane' (WebGL term). In the actual program I have put the Sun too near the Earth because if I put the Sun at its real position (units in meters) I cannot see the objects in the foreground at all.

Is there any way to make it better? If I am right about the 'near clip plane' is there any way to modify the position of that plane (and eventually also a 'far clip plane')?

Poul Riis Denmark

import numpy as np from mayavi.mlab import from math import from matplotlib.colors import hsv_to_rgb

onemillion=1000000 unit=1000000 # sizes and distances well be in meters if unit is set to one million rsun=150000unit Rsun=700unit Rearth=20unit/pi dmax=Rearth/100 phimax=atan2(dmax,Rearth) htower=300/onemillionunit rtower=3/onemillion*unit

def cylinder(pos,axis,radius,length): pi = np.pi twopi=2pi cos = np.cos sin = np.sin dphi, dh = pi / 250.0, 0.1 [phi, z] = np.mgrid[0:pi + dphi 1.5:dphi, 0:length:dh] ex=[1,0,0] normaxis=sqrt(axis[0]2+axis[1]2+axis[2]*2) ez=[axis[0]/normaxis,axis[1]/normaxis,axis[2]/normaxis] ey=[0,-ez[2],ez[1]] x = pos[0]+radius(cos(phi)ex[0]+sin(phi)ey[0])+zez[0] y = pos[1]+radius(cos(phi)ex[1]+sin(phi)ey[1])+zez[1] z = pos[2]+radius(cos(phi)ex[2]+sin(phi)ey[2])+z*ez[2] return mesh(x, y, z, colormap="copper")

def calot(pos,axis,radius,deltatheta): pi = np.pi twopi=2pi cos = np.cos sin = np.sin dphi, dtheta = pi / 250.0, deltatheta/250.0 [phi, theta] = np.mgrid[0:twopi + dphi 1.0:dphi,0:deltatheta:dtheta] ex=[1,0,0] normaxis=sqrt(axis[0]2+axis[1]2+axis[2]*2) ez=[axis[0]/normaxis,axis[1]/normaxis,axis[2]/normaxis] ey=[0,-ez[2],ez[1]] x = pos[0]+radiussin(theta)(cos(phi)ex[0]+sin(phi)ey[0])+radiuscos(theta)ez[0] y = pos[1]+radiussin(theta)(cos(phi)ex[1]+sin(phi)ey[1])+radiuscos(theta)ez[1] z = pos[2]+radiussin(theta)(cos(phi)ex[2]+sin(phi)ey[2])+radiuscos(theta)*ez[2] return mesh(x, y, z,color=(0,0,1))

figure(size=(1200,1000)) cylinder([0,0,0],[0,0,1],rtower,htower) rgb1=hsv_to_rgb((0.2,0.7,1)) xaxis=quiver3d(0, 0, 0, 1000,0,0, line_width=2, scale_factor=1) yaxis=quiver3d(0, 0, 0, 0,1000,0, line_width=2, scale_factor=1) calot([0,0,-6366000/100],[0,0,1],6366000/100,pi/180/2*10) points3d(-0,-1500000,1000,7000,resolution=256,scale_factor=1,color=(rgb1[0],rgb1[1],rgb1[2])) hsv_to_rgb((0.2,0.7,1)) view(90, 89, 5000,(0,0,0))