%% 黄金分割螺旋线

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 画黄金螺旋,分享:黄金比例螺旋展开线绘制相关推荐

  1. 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 ...

  2. matlab 画qq图,科学网—[转载]R语言绘制QQ图 - 刘朋的博文

    R语言绘制QQ图 实例1: #############加载数据 data R R=apply(R,2,as.numeric) #R语言将字符串矩阵转化为数值型矩阵,apply()函数里面的第2个值,如 ...

  3. matlab画奥迪标志,绘画汽车,用PS绘制一个逼真的奥迪汽车

    本篇教程教你通过手稿做出一个奥迪汽车,整个教程很有意思,同学们可以试着学习一下,换个思路做其他造型也是可以的,整体来说做什么和想做什么都在于自己,快释放你的双手去做吧. 效果图: 步骤1 从素描你的设 ...

  4. matlab画频散曲线,关于lamb频散曲线的绘制问题

    clc clear close all n1=0; syms c;   %定义速度c为符号函数 err=[];      %xx,err存贮误差 eps=1e-12;         %精度 ct=3 ...

  5. 如何用matlab画出树,使用treeplot将嵌套单元格绘制为树:MATLAB

    我们可以创建一个递归函数,它可以探索你的单元格数组,并为每个节点的父节点创建一个树指针数组(如 docs所述). 此函数采用包含标量或嵌套单元格数组的单元格数组(如您的问题中的那个). treebui ...

  6. Unity源码分享-黄金矿工游戏完整版

    Unity源码分享-黄金矿工游戏完整版 项目地址:https://download.csdn.net/download/Highning0007/88118933

  7. matlab画立体星星教程,抖音星空画的人怎么画 制作教程完整视频步骤分享

    抖音上面很多大神啊,每次小编都忍不住赞叹,一起来看看抖音星空画的人怎么画?抖音星空画教程视频步骤? 抖音星空画的人怎么画?最近,抖音上面的星空画挺火的,很唯美的背景图,如果你想学的话,可以看看本站提供 ...

  8. matlab用抛物线族表示马鞍面,matlab画马鞍面

    118 125]; [H,sig,ci]=ttest(x,115) [H,sig,ci]=ttest(y,115) [h,sig,ci]=ttest2(x,y) 1.在同一平面中的两个窗口分别画出心形 ...

  9. 【转】用matlab画极坐标图,希望不同的半径点对应不同颜色,应该怎么做?有什么函数

    https://zhidao.baidu.com/question/2204361617701408588.html?qbl=relate_question_1&word=polarplot ...

  10. matlab画圆的命令_matlab画半圆

    matlab画半圆 (2014-01-07 05:41:01) clear % 清除所有workspace中的变量. [x,y] = meshgrid ([-1:.05:1]); % 这是在打网点,自 ...

最新文章

  1. docker停止容器后配置_整理了一份 Docker系统知识,从安装到熟练操作看这篇就够了 | 原力计划...
  2. 谈通过测试与失败测试
  3. 全排列变种:限定 排列的差值范围 及 排列中的元素个数
  4. pytorch之学习率变化策略之MultiplicativeLR
  5. 如何做到数百万台车联网设备同时在线 0 故障
  6. 国军标GJB 151B-2013军用设备和分系统电磁发射和敏感度要求与测量(海军10项)
  7. 计算机毕业设计Java物料生产管理系统(源码+系统+mysql数据库+Lw文档)
  8. msfconsole捆绑木马
  9. Direct Sparse Visual-Inertial Odometry using Dynamic Marginalization
  10. Training data-efficient image transformers distillation through attention
  11. Linux之open虚拟专业网安装部署
  12. Android中,长度单位详解(dp、sp、px、in、pt、mm)具体解释与换算(1)
  13. Vue computed自动计算对象中的属性
  14. 洛谷【P1873】 砍树 简单二分解析
  15. 服务器托管的必要性(下)
  16. 计算机属性显示缩略图 桌面样式变了,Win7任务栏缩略图预览变成列表预览怎么解决?...
  17. 关于python的漫画_不能错过的Python漫画
  18. 钱颖一:人的创造力从哪里来?(转)
  19. 第14章可迭代的对象,迭代器和生成器
  20. Python中随机数的使用

热门文章

  1. 冷却塔为什么设计成双曲线型?
  2. 对自己狠一点,离成功近一点
  3. 基于J2EE人事考勤管理系统设计与实现(论文+项目源码) 运行环境: idea ,maven,mysql
  4. 网络营销策略——4P
  5. python语言进行生日悖论分析--随机试验方法
  6. 【MySQL】在线无锁无延迟DDL神器gh-ost
  7. 计算机协会素拓小游戏,素拓游戏策划书-20210418231500.doc-原创力文档
  8. Weakly Supervised Instance Segmentation using Class Peak Response
  9. Bullet 刚体与软体的碰撞 collisions between rigidbody and softbody in Bullet
  10. JS 字符串 常用方法(截取、替换、拼接)