Tracer un plan basé sur un vecteur normal et un point dans Matlab ou matplotlib
Comment peut-on aller en traçant un avion dans matlab ou matplotlib à partir d'un vecteur normal et un point?
Vous devez vous connecter pour publier un commentaire.
Comment peut-on aller en traçant un avion dans matlab ou matplotlib à partir d'un vecteur normal et un point?
Vous devez vous connecter pour publier un commentaire.
Pour Matlab:
Remarque: cette solution ne fonctionne que tant que la normale(3) n'est pas 0. Si le plan est parallèle à l'axe z, vous pouvez faire pivoter les dimensions de garder la même approche:
normal[3] == 0?
surf
ne pas faire de ces hypothèses - que vous avez fait quand vous avez passé dans unndgrid
commex
ety
. Il n'y a rien pour vous arrêter en passant par quelque chose d'autre.Pour tous les copier/dérouleurs, voici un code similaire pour Python à l'aide de matplotlib:
z
est de typeint
dans l'original de l'extrait de code qui crée une surface ondulée. Je voudrais utiliserz = (-normal[0]*xx - normal[1]*yy - d) * 1. /normal[2]
pour convertir en z dans lereal
.range(10)
avecnp.arange(1,11)
. b) ajouter unplt3d.azim=-135.0
ligne avantplt.show()
(depuis Matlab et matplotlib semblent avoir différentes rotations par défaut). c) coupant les cheveux en quatre:xlim([0,10])
etylim([0, 10])
. Enfin, l'ajout d'étiquettes de l'axe auraient aidé à voir la différence principale en premier lieu, je voudrais donc ajouterxlabel('x')
etylabel('y')
pour plus de clarté et, en conséquence, pour l'Matlab exemple.Pour copier-dérouleurs de vouloir un dégradé sur la surface:
Les réponses ci-dessus sont assez bonnes. Une chose à mentionner est, ils sont en utilisant la même méthode de calcul de la valeur de z pour (x,y). Le tirage dos vient qu'ils meshgrid l'avion et l'avion dans l'espace peut varier (en ne gardant que sa projection le même). Par exemple, vous ne pouvez pas obtenir une place dans l'espace 3D (mais une déformation de l'un).
Pour éviter cela, il y a une manière différente à l'aide de la rotation. Si vous commencez par générer des données dans le plan x-y (peut être n'importe quelle forme), puis tourner en quantité égale ([0 0 1] à votre vecteur) , alors vous obtiendrez ce que vous voulez. Simplement exécuter le code ci-dessous pour votre référence.
Obtenir un cercle en 3D:

Un nettoyant exemple Python qui fonctionne également pour la délicate $z,y,z$ situations,