Help to cylindric gyroid

9 次查看(过去 30 天)
Maxime
Maxime 2023-2-1
Hello,
I am engineer, and i would like to create a cylindrical gyroid,
I found a python script at this page ( https://stackoverflow.com/questions/68400574/how-to-convert-a-cartesian-problem-in-a-cylindrical-problem ), and I use chat gpt to convert to matlab, but in the end I have problems to display the surface,
This is my code:
clear all; close all
clc;
% Définir les longueurs de chaque axe
a = 1;
b = 1;
c = 1;
res = 50;
% Créer les grilles pour les variables x, y, z
[X,Y,Z] = meshgrid(linspace(0,a,res),linspace(0,b,res),linspace(0,c,res));
% Définir le nombre de points de résolution pour l'isosurface
% Calculer les coefficients k pour les trois axes
kx = 2*pi/a;
ky = 2*pi/b;
kz = 2*pi/c;
% Stocker les valeurs de x, y et z dans des variables auxiliaires
r_aux = X;
phi = Y;
Z = Z;
% Définir les constantes r1 et r2
r1 = 0.5;
r2 = 2;
% Calculer les valeurs de r en fonction de r_aux
r = r2/a.*r_aux + r1/a.*(1-r_aux);
% Calculer les valeurs de la fonction fun_values
fun_values = cos(kx.*r_aux).*sin(ky.*phi.*12) + cos(ky.*phi.*12).*sin(kz.*Z) + cos(kz.*Z).*sin(kx.*r_aux);
% Calculer les valeurs de x et y en fonction de r et phi
x = r.*cos(phi.*ky);
y = r.*sin(phi.*ky);
% Tracer l'isosurface en utilisant les valeurs de x, y, z et fun_values
p = patch(isosurface(x,y,Z,fun_values,0));
isonormals(x,y,Z,fun_values,p)
% Définir la couleur de la surface et désactiver les bords
set(p,'FaceColor','red','EdgeColor','none');
% Ajuster la vue et la lumière
view(3); axis tight
camlight
lighting gouraud
In the end i have this message error:
Error using griddedInterpolant
Grid arrays must have NDGRID structure.
Error in interp3 (line 144)
F = griddedInterpolant(X, Y, Z, V, method,extrap);
Error in isonormals (line 79)
n(:,1)=interp3(x, y, z, nx, verts(:,1), verts(:,2), verts(:,3));
Error in test2 (line 41)
isonormals(x,y,Z,fun_values,p)
Is anyone have this problem?
Thanks a lot

回答(1 个)

Balavignesh
Balavignesh 2023-2-16
Hi Maxime,
I understand that you converted a python code to MATLAB code using ChatGPT and facing an issue in displaying the surface.
The issue is because of parsing x,y as a function of r and phi to the isonormals function. You won’t be facing an issue if you parse cartesian co-ordinates.
Attaching code for reference:
clear all; close all
clc;
% Définir les longueurs de chaque axe
a = 1;
b = 1;
c = 1;
res = 50;
% Créer les grilles pour les variables x, y, z
[X,Y,Z] = meshgrid(linspace(0,a,res),linspace(0,b,res),linspace(0,c,res));
% Définir le nombre de points de résolution pour l'isosurface
% Calculer les coefficients k pour les trois axes
kx = 2*pi/a;
ky = 2*pi/b;
kz = 2*pi/c;
% Stocker les valeurs de x, y et z dans des variables auxiliaires
r_aux = X;
phi = Y;
Z = Z;
% Définir les constantes r1 et r2
r1 = 0.5;
r2 = 2;
% Calculer les valeurs de r en fonction de r_aux
r = r2/a.*r_aux + r1/a.*(1-r_aux);
% Calculer les valeurs de la fonction fun_values
fun_values = cos(kx.*r_aux).*sin(ky.*phi.*12) + cos(ky.*phi.*12).*sin(kz.*Z) + cos(kz.*Z).*sin(kx.*r_aux);
% Calculer les valeurs de x et y en fonction de r et phi
x = r.*cos(phi.*ky);
y = r.*sin(phi.*ky);
% Tracer l'isosurface en utilisant les valeurs de x, y, z et fun_values
p = patch(isosurface(x,y,Z,fun_values,0));
isonormals(X,Y,Z,fun_values,p);
% Définir la couleur de la surface et désactiver les bords
set(p,'FaceColor','red','EdgeColor','none');
% Ajuster la vue et la lumière
view(3); axis tight
camlight
lighting gouraud
I hope this helps

产品


版本

R2022b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!