欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

matlab實(shí)現(xiàn)繪制玫瑰花球的示例代碼

 更新時(shí)間:2023年08月21日 10:25:42   作者:slandarer  
這篇文章主要介紹了如何利用matlab實(shí)現(xiàn)繪制玫瑰花球,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Matlab有一定的幫助,需要的可以參考一下

效果如下:

在這里插入圖片描述

在這里插入圖片描述

原理

玫瑰繪制

要畫花球我們要先會(huì)繪制一朵花:

在這里插入圖片描述

如何畫一朵花可以看看這篇:MATLAB 3D玫瑰花繪制

三維坐標(biāo)變化

主要用下面的坐標(biāo)變化方法:

正十二面體球

想像這里有一個(gè)正十二面體球,我們把每一面放上一朵花,也就是說每兩朵花之間夾角是pi-acos(-1/sqrt(5)),我們可以通過多次x軸旋轉(zhuǎn)和多次z軸旋轉(zhuǎn)將每朵花放到合適的角度

在這里插入圖片描述

完整代碼

function roseBall
clear;clc
%曲面數(shù)據(jù)計(jì)算
%==========================================================================
[x,t]=meshgrid((0:24)./24,(0:0.5:575)./575.*20.*pi+4*pi);
p=(pi/2)*exp(-t./(8*pi));
change=sin(15*t)/150;
u=1-(1-mod(3.6*t,2*pi)./pi).^4./2+change;
y=2*(x.^2-x).^2.*sin(p);
r=u.*(x.*sin(p)+y.*cos(p));
h=u.*(x.*cos(p)-y.*sin(p));
%顏色映射表
%==========================================================================
hMap=(h-min(min(h)))./(max(max(h))-min(min(h)));
col=size(hMap,2);
colorList=[0.0200    0.0400    0.3900
         0    0.0900    0.5800
         0    0.1300    0.6400
    0.0200    0.0600    0.6900
         0    0.0800    0.7900
    0.0100    0.1800    0.8500
         0    0.1300    0.9600
    0.0100    0.2600    0.9900
         0    0.3500    0.9900
    0.0700    0.6200    1.0000
    0.1700    0.6900    1.0000];
% colorList=[0.2100    0.0900    0.3800
%     0.2900    0.0700    0.4700
%     0.4000    0.1100    0.4900
%     0.5500    0.1600    0.5100
%     0.7500    0.2400    0.4700
%     0.8900    0.3200    0.4100
%     0.9700    0.4900    0.3700
%     1.0000    0.5600    0.4100
%     1.0000    0.6900    0.4900
%     1.0000    0.8200    0.5900
%     0.9900    0.9200    0.6700
%     0.9800    0.9500    0.7100];
colorFunc=colorFuncFactory(colorList);
dataMap=colorFunc(hMap');
colorMap(:,:,1)=dataMap(:,1:col);
colorMap(:,:,2)=dataMap(:,col+1:2*col);
colorMap(:,:,3)=dataMap(:,2*col+1:3*col);
    function colorFunc=colorFuncFactory(colorList)
        xx=(0:size(colorList,1)-1)./(size(colorList,1)-1);
        y1=colorList(:,1);y2=colorList(:,2);y3=colorList(:,3);
        colorFunc=@(X)[interp1(xx,y1,X,'linear')',interp1(xx,y2,X,'linear')',interp1(xx,y3,X,'linear')'];
    end
%曲面旋轉(zhuǎn)及繪制
%==========================================================================
surface(r.*cos(t),r.*sin(t),h+0.35,'EdgeAlpha',0.05,...
    'EdgeColor',[0 0 0],'FaceColor','interp','CData',colorMap)
hold on
surface(r.*cos(t),r.*sin(t),-h-0.35,'EdgeAlpha',0.05,...
    'EdgeColor',[0 0 0],'FaceColor','interp','CData',colorMap)
Xset=r.*cos(t);
Yset=r.*sin(t);
Zset=h+0.35;
yaw_z=pi*72/180;
roll_x=pi-acos(-1/sqrt(5));
R_z_2=[cos(yaw_z),-sin(yaw_z),0;
    sin(yaw_z),cos(yaw_z),0;
    0,0,1];
R_z_1=[cos(yaw_z/2),-sin(yaw_z/2),0;
    sin(yaw_z/2),cos(yaw_z/2),0;
    0,0,1];
R_x_2=[1,0,0;
     0,cos(roll_x),-sin(roll_x);
     0,sin(roll_x),cos(roll_x)];
[nX,nY,nZ]=rotateXYZ(Xset,Yset,Zset,R_x_2);
surface(nX,nY,nZ,'EdgeAlpha',0.05,...
'EdgeColor',[0 0 0],'FaceColor','interp','CData',colorMap)
for k=1:4
    [nX,nY,nZ]=rotateXYZ(nX,nY,nZ,R_z_2);
    surface(nX,nY,nZ,'EdgeAlpha',0.05,...
    'EdgeColor',[0 0 0],'FaceColor','interp','CData',colorMap)
end   
[nX,nY,nZ]=rotateXYZ(nX,nY,nZ,R_z_1);
for k=1:5
    [nX,nY,nZ]=rotateXYZ(nX,nY,nZ,R_z_2);
    surface(nX,nY,-nZ,'EdgeAlpha',0.05,...
    'EdgeColor',[0 0 0],'FaceColor','interp','CData',colorMap)
end   
%--------------------------------------------------------------------------
    function [nX,nY,nZ]=rotateXYZ(X,Y,Z,R)
        nX=zeros(size(X));
        nY=zeros(size(Y));
        nZ=zeros(size(Z));
        for i=1:size(X,1)
            for j=1:size(X,2)
                v=[X(i,j);Y(i,j);Z(i,j)];
                nv=R*v;
                nX(i,j)=nv(1);
                nY(i,j)=nv(2);
                nZ(i,j)=nv(3);
            end
        end
    end
%axes屬性調(diào)整
%==========================================================================
ax=gca;
grid on
ax.GridLineStyle='--';
ax.LineWidth=1.2;
ax.XColor=[1,1,1].*0.4;
ax.YColor=[1,1,1].*0.4;
ax.ZColor=[1,1,1].*0.4;
ax.DataAspectRatio=[1,1,1];
ax.DataAspectRatioMode='manual';
ax.CameraPosition=[-6.5914  -24.1625   -0.0384];
end

另:補(bǔ)兩張古早之前做的折紙花球:

在這里插入圖片描述

在這里插入圖片描述

我好像在詭異配色的道路上越走越遠(yuǎn)了。。。其實(shí)后面第二種配色還可以不是嘛 。。。

配色1:

在這里插入圖片描述

配色2:

在這里插入圖片描述

配色3:

在這里插入圖片描述

配色4:

在這里插入圖片描述

配色4的數(shù)據(jù)上下顛倒是這樣的:

在這里插入圖片描述

這幾種顏色大家可以試試看,我真的盡力了。。。。

顏色數(shù)據(jù):

colorList1=[0.2000    0.0800    0.4300
    0.2000    0.1300    0.4600
    0.2000    0.2100    0.5000
    0.2000    0.2800    0.5300
    0.2000    0.3700    0.5800
    0.1900    0.4500    0.6200
    0.2000    0.4800    0.6400
    0.1900    0.5400    0.6700
    0.1900    0.5700    0.6900
    0.1900    0.7500    0.7800
    0.1900    0.8000    0.8100
];
colorList2=[0.1300    0.1000    0.1600
    0.2000    0.0900    0.2000
    0.2800    0.0800    0.2300
    0.4200    0.0800    0.3000
    0.5100    0.0700    0.3400
    0.6600    0.1200    0.3500
    0.7900    0.2200    0.4000
    0.8800    0.3500    0.4700
    0.9000    0.4500    0.5400
    0.8900    0.7800    0.7900
];
colorList3=[0.3200    0.3100    0.7600
    0.3800    0.3400    0.7600
    0.5300    0.4200    0.7500
    0.6400    0.4900    0.7300
    0.7200    0.5500    0.7200
    0.7900    0.6100    0.7100
    0.9100    0.7100    0.6800
    0.9800    0.7600    0.6700
];
colorList4=[0.9500    0.2300    0.6600
    0.7500    0.2100    0.6000
    0.6200    0.2000    0.5700
    0.4500    0.1800    0.5200
    0.3200    0.2100    0.5200
    0.2700    0.3100    0.6000
    0.2500    0.3600    0.6400
    0.1900    0.4800    0.7400
];

后注:兩個(gè)面夾角為pi-acos(-1/sqrt(5)),同平面旋轉(zhuǎn)為了五等分要轉(zhuǎn)72度,因而yaw_z,和roll_x取值并不相同,代碼和原文描述已經(jīng)做出相應(yīng)更改。

到此這篇關(guān)于matlab實(shí)現(xiàn)繪制玫瑰花球的示例代碼的文章就介紹到這了,更多相關(guān)matlab繪制玫瑰花球內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言實(shí)現(xiàn)線性動(dòng)態(tài)(單向)鏈表的示例代碼

    C語言實(shí)現(xiàn)線性動(dòng)態(tài)(單向)鏈表的示例代碼

    本文主要介紹了C語言實(shí)現(xiàn)線性動(dòng)態(tài)(單向)鏈表的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • 一篇文章帶你了解C++語法基礎(chǔ)--字符串

    一篇文章帶你了解C++語法基礎(chǔ)--字符串

    這篇文章主要介紹了C++常用字符串分割方法實(shí)例匯總,包括了strtok函數(shù)、STL、Boost等常用的各類字符串分割方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2021-08-08
  • 深入剖析C語言中qsort函數(shù)的實(shí)現(xiàn)原理

    深入剖析C語言中qsort函數(shù)的實(shí)現(xiàn)原理

    這篇文章主要介紹了C語言中qsort函數(shù)的實(shí)現(xiàn)原理,本文將從回調(diào)函數(shù),qsort函數(shù)的應(yīng)用,qsort函數(shù)的實(shí)現(xiàn)原理三個(gè)方面進(jìn)行講解,并通過代碼示例講解的非常詳細(xì),需要的朋友可以參考下
    2024-03-03
  • C語言中access/_access函數(shù)的使用實(shí)例詳解

    C語言中access/_access函數(shù)的使用實(shí)例詳解

    本文通過實(shí)例代碼給大家介紹了C語言中access/_access函數(shù)的使用,代碼簡單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • C語言詳解實(shí)現(xiàn)鏈?zhǔn)蕉鏄涞谋闅v與相關(guān)接口

    C語言詳解實(shí)現(xiàn)鏈?zhǔn)蕉鏄涞谋闅v與相關(guān)接口

    二叉樹的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)是指,用鏈表來表示一棵二叉樹,即用鏈來指示元素的邏輯關(guān)系。通常的方法是鏈表中每個(gè)結(jié)點(diǎn)由三個(gè)域組成,數(shù)據(jù)域和左右指針域,左右指針分別用來給出該結(jié)點(diǎn)左孩子和右孩子所在的鏈結(jié)點(diǎn)的存儲(chǔ)地址
    2022-04-04
  • C語言深入講解函數(shù)的使用

    C語言深入講解函數(shù)的使用

    各位小伙伴們,今天YU同學(xué)給大家?guī)淼氖桥c函數(shù)相關(guān)的知識(shí),本篇將會(huì)帶著大家初步認(rèn)識(shí)和調(diào)用函數(shù)來解決一些簡單的問題
    2022-04-04
  • C語言深入探究sizeof與整型數(shù)據(jù)存儲(chǔ)及數(shù)據(jù)類型取值范圍

    C語言深入探究sizeof與整型數(shù)據(jù)存儲(chǔ)及數(shù)據(jù)類型取值范圍

    在main函數(shù)中,sizeof是可以正常工作的,但是在自定義函數(shù)中就不可以了。所以本文將為大家詳細(xì)講解一下關(guān)鍵字sizeof、整型數(shù)據(jù)存儲(chǔ)深入、數(shù)據(jù)類型取值范圍深入
    2022-07-07
  • C語言進(jìn)制轉(zhuǎn)換代碼分享

    C語言進(jìn)制轉(zhuǎn)換代碼分享

    本文給大家分享的是使用C語言實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換的代碼,十分的簡單實(shí)用,有需要的小伙伴可以參考下。
    2015-07-07
  • 使用C語言實(shí)現(xiàn)三子棋小游戲

    使用C語言實(shí)現(xiàn)三子棋小游戲

    這篇文章主要為大家詳細(xì)介紹了使用C語言實(shí)現(xiàn)三子棋小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C++合并二叉樹的思路與示例代碼

    C++合并二叉樹的思路與示例代碼

    二叉樹大家應(yīng)該都不陌生,但是合并二叉樹呢?這篇文章主要給大家介紹了關(guān)于C++合并二叉樹的相關(guān)資料,文中給出了兩種解決的方法,大家可以根據(jù)需要選擇對(duì)應(yīng)的方法,需要的朋友可以參考下
    2021-08-08

最新評(píng)論