Para este programa se están utilizando datos obtenidos de una simulación de un dipolo de media onda en HFSS en un archivo csv.
# -*- coding: utf-8 -*-
"""
@author: Rodolfo Escobar
"""
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
data = np.loadtxt('dipolo_16.csv',delimiter=',',skiprows=1)
theta = data[:,0]
phi = data[:,1]
r = data[:,2]
a = 0.0174532925
phi_rad = a*phi;
theta_rad = a*theta;
#Conversión de coordenadas
x = r * np.sin(phi_rad) * np.cos(theta_rad)
y = r * np.sin(phi_rad) * np.sin(theta_rad)
z = r * np.cos(phi_rad);
x = np.reshape(x,(73, 37))
y = np.reshape(y,(73, 37))
z = np.reshape(z,(73,37))
R = np.reshape(r,(73,37))
N = R/R.max()
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
surf = ax.plot_surface(x, y, z, rstride=1, cstride=2,facecolors=cm.coolwarm(N),cmap = 'coolwarm',linewidth=0.5 )
surf.set_edgecolor('k')
# Equivalente a la instrucción axis equal en Matlab
max_range = np.array([x.max()-x.min(), y.max()-y.min(), z.max()-z.min()]).max() / 2.0
mean_x = x.mean()
mean_y = y.mean()
mean_z = z.mean()
ax.set_xlim(mean_x - max_range, mean_x + max_range)
ax.set_ylim(mean_y - max_range, mean_y+ max_range)
ax.set_zlim(mean_z - max_range, mean_z + max_range)
#
plt.title(u'Patrón de Radiación')
m = cm.ScalarMappable(cmap=cm.coolwarm)
m.set_array(R)
cbar = fig.colorbar(m,shrink=0.8, aspect=9)
cbar.set_label('dB')
plt.rc('ytick', labelsize=7)
plt.show()
1 comentario:
Jajajaja gracias Rodolfo justo lo que buscaba
Publicar un comentario