#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Thu Sep 28 18:08:51 2017

@author: jaques
"""

#Primeiro criamos os eixos tridimensionais, 
#importamos as bibliotecas necessárias, 
#a pyplot (presente na matplotlib) e a numpy:

from mpl_toolkits.mplot3d import Axes3D  
 
import matplotlib.pyplot as plt
import numpy as np
#Depois, definimos duas constantes: n_angles (número de ângulos) 
#e n_radii (número de raios). 
#Vamos usar os valores 72 e 4, respectivamente.
n_angles = 72
n_radii = 4

#Agora vamos criar um vetor de raios com a função linspace(); 
#esse vetor vai de 0,125 a 1 e é dividido no número de raios 
#que definimos anteriormente. 
#Ainda não incluímos zero, pra não duplicar os pontos depois.

radii = np.linspace(0.125, 1.0, n_radii)
angles = np.linspace(0, 2*np.pi, n_angles)
#Então, para cada raio, repetiremos o vetor dos ângulos, 
#criando uma malha. Essa malha representará os pontos 
#da nossa função.
angles = np.repeat(angles[..., np.newaxis], n_radii, axis=1)
#Agora os pontos são convertidos de coordenadas polares 
#(raio e ângulo) para coordenadas cartesianas (x e y). 
#Aqui adicionamos o zero, usando append:
x = np.append(0, (radii*np.cos(angles)).flatten())
y = np.append(0, (radii*np.sin(angles)).flatten())

#Então podemos aplicar uma função nos pontos da malha. 
#Escolhemos a função abaixo:
z = np.sin(-x*(y**2))+np.cos((x**2)*-y)

#Depois criamos uma figura e indicamos a projeção em 3D.
fig = plt.figure()
ax = fig.gca(projection='3d')
ax.plot_trisurf(x, y, z, cmap='Oranges', linewidth=0.1)
plt.show()

#Finalmente, usamos a função plot_trisurf() para gerar 
#nosso gráfico. Veja que o mapa de cores escolhido foi 
#o ‘Oranges’, e o comprimento da linha é de 0,1. Quer 
#testar mapas de cores diferentes? Veja quantas opções 
#há! Altere também o comprimento de linha e veja como 
#o gráfico se comporta.


    

    
    