Esempio n. 1
0
def draw_arrow_field(x_,
                     y_,
                     z_,
                     u_,
                     v_,
                     w_,
                     s=0.25,
                     color=(0, 0, 1),
                     width=1.5,
                     head_angle=90):
    magnitudes = [
        lm.length(vec) for vec in [(u_[x, y, z], v_[x, y, z], w_[x, y, z])
                                   for x in x_ for y in y_ for z in z_]
    ]
    #magnitudes = [val for val in magnitudes if not val == 0]
    print min(magnitudes), max(magnitudes)
    vel_max = max(magnitudes)
    for u_dex, x in enumerate(x_):
        for v_dex, y in enumerate(y_):
            for w_dex, z in enumerate(z_):
                u = u_[u_dex, v_dex, w_dex]
                v = v_[u_dex, v_dex, w_dex]
                w = w_[u_dex, v_dex, w_dex]
                glPushMatrix()
                glTranslatef(x, y, z)
                conv = lm.length((u, v, w))
                if conv:

                    #pdb.set_trace()
                    mag_scale = 2.0 * conv / vel_max
                    #print mag_scale, 1, 1, conv, vel_max

                    conv = 1.0 / conv
                    dir_ = (u * conv, v * conv, w * conv)
                    x_hat = (1, 0, 0)
                    q_hat = np.cross(x_hat, dir_)
                    if lm.length(q_hat):
                        q_hat = q_hat / lm.length(q_hat)
                        ang = lm.angle(x_hat, dir_, unit='degree')
                        glScalef(mag_scale, 1, 1)
                        glRotatef(ang, *q_hat)

                    glScalef(s, s, s)
                    draw_line(start=(0, 0, 0),
                              end=x_hat,
                              color=color,
                              width=width)
                    glTranslatef(*x_hat)
                    glRotatef(head_angle, *x_hat)
                    draw_triangle(color=color)

                else:
                    draw_dot(color=(1, 0, 0))
                glPopMatrix()
Esempio n. 2
0
	def compute_cross_section(self, n_):
		unit = np.array([0, 0, 1])
		rot = self.body.getRotation()
		rot = np.ndarray(shape = (3, 3,), dtype = np.float16, 
				buffer = np.array(rot, dtype = np.float16))
		unit = np.dot(rot, unit).round()
		alpha = lm.angle(unit, n_)
		r_ = self.parameters['radius']
		l_ = self.parameters['length']
		area = r_*(2*l_*math.sin(alpha) + math.pi*r_)
		return area
Esempio n. 3
0
def draw_arrow_field(x_, y_, z_, u_, v_, w_, s = 0.25, 
		color = (0,0,1), width = 1.5, head_angle = 90):
	magnitudes = [lm.length(vec) for vec in 
		[(u_[x,y,z],v_[x,y,z],w_[x,y,z]) for 
			x in x_ for y in y_ for z in z_]]
	#magnitudes = [val for val in magnitudes if not val == 0]
	print min(magnitudes), max(magnitudes)
	vel_max = max(magnitudes)
	for u_dex, x in enumerate(x_):
		for v_dex, y in enumerate(y_):
			for w_dex, z in enumerate(z_):
				u = u_[u_dex, v_dex, w_dex]
				v = v_[u_dex, v_dex, w_dex]
				w = w_[u_dex, v_dex, w_dex]
				glPushMatrix()
				glTranslatef(x, y, z)
				conv = lm.length((u, v, w))
				if conv:

					#pdb.set_trace()
					mag_scale = 2.0*conv/vel_max
					#print mag_scale, 1, 1, conv, vel_max

					conv = 1.0/conv
					dir_ = (u*conv, v*conv, w*conv)
					x_hat = (1, 0, 0)
					q_hat = np.cross(x_hat, dir_)
					if lm.length(q_hat):
						q_hat = q_hat/lm.length(q_hat)
						ang = lm.angle(x_hat, dir_, unit = 'degree')
						glScalef(mag_scale, 1, 1)
						glRotatef(ang, *q_hat)

					glScalef(s, s, s)
					draw_line(start = (0, 0, 0), end = x_hat, 
								color = color, width = width)
					glTranslatef(*x_hat)
					glRotatef(head_angle, *x_hat)
					draw_triangle(color = color)

				else: draw_dot(color = (1, 0, 0))
				glPopMatrix()