How to plot this feather using a mathematical equation
2 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Ahmed Mohamed Mansoor
le 26 Sep 2022
Commenté : Ahmed Mohamed Mansoor
le 27 Sep 2022
I came across this image that intruiged me. It is a plot of a feather based on a mathematical equation. I attempted it, but couldn't get it right. Any idea how this could me done? I tried to use vectorisation method instead of a loop for now, but any method should be okay.
P.S: I'm still fairly new with MATLAB.
Here is the code I attempted
clear; close all; clc;
syms x y
f(x,y) = (-9/10) + ( 1 + (1/6) + ((1/(3*pi))*atan(30*( (3/50)-(y+(28/25)).^2 ))) )...
.*(1-(((7*y)/10)+(2/10)).^10).*cos(x-(y/8)-(1/8)*(y+1).^2).^2000 ...
+(1-sin((170*y)- 300*(x-(y/8)-(1/8)*(y+1).^2)^2 + (400/3)*(x-(y/8)-(1/8)*(y+1).^2)^3).^6)...
.*((1/2)+((1/pi).*atan(400.*(1-(14.*(x-(1/20)-(y/8)-((1/8).*(y+1).^2).^2+(y.^2))).^2))));
figure()
fc = fcontour(f);
fc.LevelList = [0 0];
Would appreciate the help.
0 commentaires
Réponse acceptée
Davide Masiello
le 26 Sep 2022
Modifié(e) : Davide Masiello
le 26 Sep 2022
There:
clear,clc
[x,y] = meshgrid(linspace(-0.4,0.9,1000),linspace(-1.5,1.1,1000));
xy = x-y/8-(1/8)*(y+1).^2;
A = 1+1/6+atan(30*(3/50-(y+28/25).^2))/(3*pi);
B = 1-(7*y/10+2/10).^10;
C = 1-sin(170*y-300*xy.^2+(400/3)*xy.^3).^6;
D = 1/2+atan(400*(1-(14*(xy-1/20).^2+y.^2).^2))/pi;
f = -9/10 + A.*B.*cos(xy).^2000 + C.*D;
f(f>0) = 1;
f(f<0) = 0;
contourf(x,y,f,[0 1])
axis equal
map = [1 1 1 ; 0 0 0];
colormap(map)
5 commentaires
Davide Masiello
le 27 Sep 2022
The code as it it now plots everything all at once.
How exactly do you want to animate it?
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur 2-D and 3-D Plots dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!