matlab 画黄金螺旋,分享:黄金比例螺旋展开线绘制
%% 黄金分割螺旋线
function myhelix
clear
clc
close all
% 用户螺旋线参数
K=1; % 螺旋线缩放比例因子
devTheta=pi;
devCicle=[0,0];
Nd=5; % 考察圆弧段数,Nd>3
addTheta= -pi/3; % 在最后一段圆弧延续或截断适当角度以便美观
Nset=6; Nset=max(4,Nset); % 每段圆弧坐标采用点密度基数
% 基准螺旋线参数
[x,y,p,r,q] =goldhelix;
[x,y] =goldhelix(Nd,Nset);
% 用户螺旋线参数
[x1,y1]=goldhelix(Nd,Nset, [],0,devCicle);
[x2,y2]=goldhelix(Nd,[], [],2*pi/3,[]);
figure % 缩比后螺旋线绘图
plot(x1,y1, x2,y2),hold on
grid on
axis equal
end
%
%% %%%%%%%%%%%%%%
%% 计算螺旋线
%% %%%%%%%%%%%%%%
function [x,y,p,r,Q]=goldhelix(Nd,Nset, K,devTheta,devCicle,addTheta)
%
% =======================
% 缺省参数赋默认值
if 0==exist('Nd','var') || isempty(Nd), Nd=5; end
if 0==exist('Nset','var') || isempty(Nset), Nset=5; end
if 0==exist('K','var') || isempty(K), K=1; end
if 0==exist('devTheta','var') || isempty(devTheta), devTheta=0; end
if 0==exist('devCicle','var') || isempty(devCicle), devCicle=[0,0]; end
if 0==exist('addTheta','var') || isempty(addTheta), addTheta=0; end
%=======================
% 基准螺旋线特征参数
q0=4; % 起始圆弧段象限位置
p0=[0,0]; % 起始圆弧段圆心位置
% 螺旋线数据序列
X=[]; Y=[]; % 螺旋线坐标序列
P=[]; % 圆弧段圆心坐标序列
R=[]; % 圆弧段基准半径序列
Q=[]; % 圆弧段象限位置序列
%============================
% 计算基准螺旋线首段圆弧
r0=1; % 起始圆弧段基准半径
%p0=[0,0];
r1=0; r2=0;
%q0=4; % 在4象限
theta1=pi/2*(q0-1); theta2=pi/2*(q0);
THETA=linspace(theta1,theta2,Nset);% 圆弧段的极坐标形式
RHO=r0*ones(1,Nset);
[x0,y0]= pol2cart(THETA,RHO);
x0=x0+p0(1); y0=y0+p0(2); % 工作圆弧坐标随圆心平移
X=[X;x0']; Y=[Y,y0'];
P=[P;p0];
R=[R;r0];
Q=[Q;q0];
%clorLong={'yellow','magenta','cyan','red','green','blue','white','black'};
%clorShort={'y','m','c','r','g','b','w','b'};
clorLong={'magenta','cyan','red','green','blue','black'};
clorShort={'m','c','r','g','b','k'};
ci=1;
figure(1) % 螺旋线绘图
%p=plot(x0,y0,'.-'),hold on, set(p,'Color',clorLong{ci});
%p=plot(p0(:,1),p0(:,2),'*'), set(p,'Color',clorLong{ci});
plot(x0,y0,[clorShort{ci},'.-']),hold on,
%plot(p0(:,1),p0(:,2),[clorShort{ci},'*']),
grid on
axis equal
%====================
% 计算基准螺旋线后续圆弧段,依次象限循环
r2=0; r1=1; r0=1; % r0=r1+r2;第2段圆弧基准半径递推
%q0=q0+1; % 第2段圆弧工作象限初值
for i=2:Nd
% 工作圆弧基准半径
r0=r1+r2;
% 工作圆弧象限位置
q0=q0+1;
if q0>4;
q0=1;
end
% 工作圆弧极坐标采样
theta1=pi/2*(q0-1); theta2=pi/2*(q0);
if i==Nd; % 在最后一段圆弧延续或截断适当角度以便美观
theta2=theta2+addTheta;
end
dT=theta2-theta1;
N=Nset*r0*dT/(pi/2); % 根据圆弧段大小r0和弧度dT,调整采样点密度,长度均匀
THETA=linspace(theta1,theta2,N);
RHO=r0*ones(1,N);
[x0,y0]= pol2cart(THETA,RHO); % 工作圆弧极坐标-直角坐标转换
% 工作圆弧坐标平移
switch q0 % 工作象限
case 1 % I象限
dP=[-r2,0]; %工作圆弧圆心相对前一段圆弧圆心坐标平移
case 2
dP=[0,-r2];
case 3
dP=[r2,0];
case 4
dP=[0,r2];
otherwise
;
end
p0=p0+dP; % 工作圆弧圆心坐标平移
x0=x0+p0(1); y0=y0+p0(2); % 工作圆弧坐标
% 螺旋线延续
X=[X;x0(2:end)']; Y=[Y;y0(2:end)']; % 螺旋线延续,去掉每段的起始点,因为有重复
P=[P;p0];
R=[R;r0];
Q=[Q;q0];
% 圆弧段绘图
%clorLong={'yellow','magenta','cyan','red','green','blue','white','black'};
figure(1) % 螺旋线绘图
ci=ci+1; % 换色
if ci>length(clorLong)
ci=1;
end
%p=plot(x0,y0,'.-'),hold on, set(p,'Color',clorLong{ci});
%p=plot(p0(:,1),p0(:,2),'*'), set(p,'Color',clorLong{ci});
plot(x0,y0,[clorShort{ci},'.-']),hold on, % 螺旋线弧段换色
%plot(p0(1),p0(2),[clorShort{ci},'*']),
%txi=fix(N/2); text(x0(txi),y0(txi),['R=',num2str(r0)])
%工作圆弧半径基准值递推调整
r2=r1; r1=r0;
end
%figure(1), hold off
%====================
% 用户螺旋曲线,根据基准螺旋线变换而得:缩放-旋转-平移
% 缩放
x=X*K; y=Y*K;
r=R*K;
p=P*K;
% 旋转
cR=cos(devTheta); sR=sin(devTheta);
x_=x*cR-y*sR; y_=x*sR+y*cR;
x=x_; y=y_;
r=r;
px=p(:,1)*cR-p(:,2)*sR; py=p(:,1)*sR+p(:,2)*cR;
p=[px,py];
% 平移
x=x+devCicle(1);y=y+devCicle(2);
r=r;
p(:,1)=p(:,1)+devCicle(1); p(:,2)=p(:,2)+devCicle(2);
%
figure(1) % 缩比后螺旋线绘图
plot(x,y,'.-'),hold on
%plot(p(:,1),p(:,2),'ro'),hold off
grid on
axis equal
hold off
%
end
matlab 画黄金螺旋,分享:黄金比例螺旋展开线绘制相关推荐
- matlab画爱心代码分享
这个是别人的 close all; clear;x=linspace(0,2*pi); % n=100; % t=0:2*pi/n:2*pi; for k=1:length(x)clf; hold o ...
- matlab 画qq图,科学网—[转载]R语言绘制QQ图 - 刘朋的博文
R语言绘制QQ图 实例1: #############加载数据 data R R=apply(R,2,as.numeric) #R语言将字符串矩阵转化为数值型矩阵,apply()函数里面的第2个值,如 ...
- matlab画奥迪标志,绘画汽车,用PS绘制一个逼真的奥迪汽车
本篇教程教你通过手稿做出一个奥迪汽车,整个教程很有意思,同学们可以试着学习一下,换个思路做其他造型也是可以的,整体来说做什么和想做什么都在于自己,快释放你的双手去做吧. 效果图: 步骤1 从素描你的设 ...
- matlab画频散曲线,关于lamb频散曲线的绘制问题
clc clear close all n1=0; syms c; %定义速度c为符号函数 err=[]; %xx,err存贮误差 eps=1e-12; %精度 ct=3 ...
- 如何用matlab画出树,使用treeplot将嵌套单元格绘制为树:MATLAB
我们可以创建一个递归函数,它可以探索你的单元格数组,并为每个节点的父节点创建一个树指针数组(如 docs所述). 此函数采用包含标量或嵌套单元格数组的单元格数组(如您的问题中的那个). treebui ...
- Unity源码分享-黄金矿工游戏完整版
Unity源码分享-黄金矿工游戏完整版 项目地址:https://download.csdn.net/download/Highning0007/88118933
- matlab画立体星星教程,抖音星空画的人怎么画 制作教程完整视频步骤分享
抖音上面很多大神啊,每次小编都忍不住赞叹,一起来看看抖音星空画的人怎么画?抖音星空画教程视频步骤? 抖音星空画的人怎么画?最近,抖音上面的星空画挺火的,很唯美的背景图,如果你想学的话,可以看看本站提供 ...
- matlab用抛物线族表示马鞍面,matlab画马鞍面
118 125]; [H,sig,ci]=ttest(x,115) [H,sig,ci]=ttest(y,115) [h,sig,ci]=ttest2(x,y) 1.在同一平面中的两个窗口分别画出心形 ...
- 【转】用matlab画极坐标图,希望不同的半径点对应不同颜色,应该怎么做?有什么函数
https://zhidao.baidu.com/question/2204361617701408588.html?qbl=relate_question_1&word=polarplot ...
- matlab画圆的命令_matlab画半圆
matlab画半圆 (2014-01-07 05:41:01) clear % 清除所有workspace中的变量. [x,y] = meshgrid ([-1:.05:1]); % 这是在打网点,自 ...
最新文章
- docker停止容器后配置_整理了一份 Docker系统知识,从安装到熟练操作看这篇就够了 | 原力计划...
- 谈通过测试与失败测试
- 全排列变种:限定 排列的差值范围 及 排列中的元素个数
- pytorch之学习率变化策略之MultiplicativeLR
- 如何做到数百万台车联网设备同时在线 0 故障
- 国军标GJB 151B-2013军用设备和分系统电磁发射和敏感度要求与测量(海军10项)
- 计算机毕业设计Java物料生产管理系统(源码+系统+mysql数据库+Lw文档)
- msfconsole捆绑木马
- Direct Sparse Visual-Inertial Odometry using Dynamic Marginalization
- Training data-efficient image transformers distillation through attention
- Linux之open虚拟专业网安装部署
- Android中,长度单位详解(dp、sp、px、in、pt、mm)具体解释与换算(1)
- Vue computed自动计算对象中的属性
- 洛谷【P1873】 砍树 简单二分解析
- 服务器托管的必要性(下)
- 计算机属性显示缩略图 桌面样式变了,Win7任务栏缩略图预览变成列表预览怎么解决?...
- 关于python的漫画_不能错过的Python漫画
- 钱颖一:人的创造力从哪里来?(转)
- 第14章可迭代的对象,迭代器和生成器
- Python中随机数的使用
热门文章
- 冷却塔为什么设计成双曲线型?
- 对自己狠一点,离成功近一点
- 基于J2EE人事考勤管理系统设计与实现(论文+项目源码) 运行环境: idea ,maven,mysql
- 网络营销策略——4P
- python语言进行生日悖论分析--随机试验方法
- 【MySQL】在线无锁无延迟DDL神器gh-ost
- 计算机协会素拓小游戏,素拓游戏策划书-20210418231500.doc-原创力文档
- Weakly Supervised Instance Segmentation using Class Peak Response
- Bullet 刚体与软体的碰撞 collisions between rigidbody and softbody in Bullet
- JS 字符串 常用方法(截取、替换、拼接)