参考了matlab 绘制任意方向和位置的空间圆锥体中绘制圆锥的思路,在此基础上加了我需要的应用。就是绘制波束扫描示意图。

1 原理

  • 根据波束宽度得到在归一化威力值上的弧长。
  • 然后根据方位和俯仰向弧长产生一个模拟波束参数的圆柱的坐标点。
  • 将圆柱以半径修正高度坐标,转换成圆锥。
  • 修正因为绕轴旋转带来的波束角度偏差。
  • 将波束旋转到波束指向位置。
  1. cylinder
    [X,Y,Z] = cylinder(r,n) 返回具有指定剖面曲线 r 和圆周上 n 个等距点的圆柱的 x、y 和 z 坐标。该函数以三个 (n+1)×(n+1) 矩阵形式返回 x、y 和 z 坐标。

  2. makehgtform
    使用 makehgtform 创建用于转换、缩放和旋转图形对象的变换矩阵。M = makehgtform(‘axisrotate’,[ax,ay,az],t) 围绕轴 [ax ay az] 旋转 t 弧度。

  3. rotate
    将对象根据给定的坐标轴旋转给定的角度。
    rotate(h,direction,alpha,origin) 将图形对象 h 旋转 alpha 度。指定 h 为曲面、补片、线条、文本或图像对象。direction 是一个二元素或三元素向量,它与旋转轴原点共同确定旋转轴。旋转轴的原点为origin,默认原点是图框中心。

2 效果

  1. 单个波束

示例:产生指向[30,30],波束宽度为[5,8],归一化威力为1的波束1 以及 指向[15,7.5],波束宽度为[15,15],归一化威力为0.5的波束1
代码:

clear all;
close all;%% 波束参数
phi = [30 15];
theta = [30 7.5];
bw_azim = [5 15];
bw_elev = [8 15];
r = [1 0.5];
%% 绘图
figure;
for i = 1:length(r)[XSdat,YSdat,ZSdat,XPdat,YPdat,ZPdat] = beam_point(phi(i),theta(i),bw_azim(i),bw_elev(i),r(i));mesh(XSdat,YSdat,ZSdat,(XSdat.^2 + YSdat.^2 + ZSdat.^2));hold on;fill3(XPdat,YPdat,ZPdat,'b');hold on;
end
xlim([0 1]);ylim([-1 1]);zlim([0 1]);
title('归一化波束指向');
xlabel('x');ylabel('y');zlabel('z');

  1. 波束扫描示意图

3 函数代码

function [XSdat,YSdat,ZSdat,XPdat,YPdat,ZPdat] = beam_point(phi,theta,bw_azim,bw_elev,r)
%--------------------- 绘制波束指向椭圆锥示意图 ---------------------
% 功能:根据给定的波束指向、波束宽度和归一化威力绘制波束指向示意图;
% 参数:phi : 方位角(角度制),
%       theta: 俯仰角(角度制),
%       bwx : 波束方位向宽度(角度制),
%       bwy : 波束俯仰向宽度(角度制),
%       r   : 归一化威力;
% 作者: w0shishabi
%------------------------------------------------------------------  % 测试
% theta = 30;
% phi = 30;
% bw_azim = 5;
% bw_elev = 8;
% r = 1;% 计算圆锥对应在威力球面上的弧长
arc_length_beam_azim = bw_azim * pi * r / 180;
arc_length_beam_elev = bw_elev * pi * r / 180;% 计算笛卡尔坐标
px = cosd( theta ) * cosd( phi );
py = cosd( theta ) * sind( phi );
pz = sind( theta );
rotate_axis = [px py pz+1];% 绘制椭圆锥
[x,y,z]=cylinder(linspace(1,0,50),100);
x = x * arc_length_beam_azim/2;
y = y * arc_length_beam_elev/2;
z=(1-z)*r ;% 绘制椭圆锥
fig = figure;
EndPlate1=fill3(x(1,:),y(1,:),z(1,:),'b');
hold on;
Cylinder=mesh(x,y,z);
% xlim([-1 1]);ylim([-1 1]);zlim([0 1]);  % rotate是绕轴旋转,所以需要线修正因为旋转造成的波束角度偏差
rotate_h = makehgtform('axisrotate',rotate_axis,pi);
azim_v = rotate_h(1:3,1:3) * [0;1;0];
angle_correction = acos(dot([0 0 1],azim_v.')/(norm([0 0 1])*norm(azim_v.'))) / pi * 180;
rotate(Cylinder,[0 0 1],-angle_correction,[0 0 0]);
rotate(EndPlate1,[0 0 1],-angle_correction,[0 0 0]);% 将修正后的波束转到指向角
rotate(Cylinder,rotate_axis,180,[0 0 0]);
rotate(EndPlate1,rotate_axis,180,[0 0 0]);% 获取模型数据
XSdat = get(Cylinder,'XData');
YSdat = get(Cylinder,'YData');
ZSdat = get(Cylinder,'ZData');
XPdat = get(EndPlate1,'XData');
YPdat = get(EndPlate1,'YData');
ZPdat = get(EndPlate1,'ZData');% 关闭临时figure
close(fig);end

matlab 绘制椭圆锥波束指向示意图相关推荐

  1. matlab绘制 椭球体,如何用绘图法绘制椭球体

    好吧,比我想象的要容易.有一个alphahull选项,它要求自动计算相应的三角剖分.在from plotly.offline import iplot, init_notebook_mode from ...

  2. 使用matlab绘制示意图的示例

    在本示例中,将给出如何用matlab绘制示意图,添加图例,添加标题等等,以及在matlab中调用LaTeX字体的命令. 代码如下: clear;clc;close all% Initialize sy ...

  3. matlab 绘制任意方向和位置的空间圆锥体

    matlab 绘制任意方向和位置的空间圆锥体 function cone3(X1,X2,r,color) %一个简单的例子:cone3([1 2 3],[7 8 9],1,'b');%两个空间点位置, ...

  4. 单页双曲面 matlab,matlab绘制单叶双曲面

    应用 MATLAB 绘制二次曲面图 1.用 surf 工 mesh 函数绘图 Surf 函数绘制的是三维表面图,mesh 函数绘制的是三维网格图,当二次曲面方程是标准方 程时,原方程式...... m ...

  5. matlab绘制双叶双曲面,应用MATLAB绘制二次曲面图.doc

    应用MATLAB绘制二次曲面图 应用MATLAB绘制二次曲面图 用surf工mesh函数绘图 Surf函数绘制的是三维表面图,mesh函数绘制的是三维网格图,当二次曲面方程是标准方程时,原方程式可化为 ...

  6. MATLAB绘制圆、椭圆、矩形等基本平面图形

    MATLAB绘制基本平面图形 **画线的方法** ***rectangle函数** **画矩形的方法** **旋转矩形的方法** **画圆的方法** **画圆弧的方法** **画椭圆的方法** **画 ...

  7. MATLAB绘制脉冲星轮廓

    MATLAB绘制脉冲星轮廓 脉冲星是大质量恒星演化.塌缩.超新星爆发的遗迹,是一种具有超高温.超高压.超高密度.超强磁场.超强电场和超强引力场等极端物理条件的天体,其典型半径约为10千米,而质量却与太 ...

  8. 【MATLAB高等数学】十种常用二次曲面及其matlab绘制

    十种常用二次曲面及其matlab绘制 1.椭球面 若a=b=c,则为球面 参数方程: 2.椭圆锥面 若a=b,则为圆锥面 参数方程: 3.单页双曲面 参数方程: 4.双叶双曲面 参数方程: 5.椭圆抛 ...

  9. nyquist图怎么画matlab,用MATLAB绘制Nyquist图

    <用MATLAB绘制Nyquist图>由会员分享,可在线阅读,更多相关<用MATLAB绘制Nyquist图(9页珍藏版)>请在人人文库网上搜索. 1.用MATLAB绘制Nyqu ...

最新文章

  1. linux 设置 ls -l 快捷键为 ll 别名
  2. 不可不读的绝对英文经典
  3. 两路虚拟化服务器,当四核多路服务器碰上虚拟化
  4. BZOJ 4811 树链剖分+线段树
  5. XGBoost的安装与介绍
  6. 数据库索引如何工作?原理
  7. python内置数学函数库_在没有任何内置的求值函数或外部库的情况下用python解决数学问题...
  8. 串级控制MATLAB实验报告,串级控制系统实验报告.docx
  9. 修图类APP原型设计分享– Hello Camera
  10. 程序员数学(15)--分式
  11. 全民投资人游戏服务器维护,欢乐园《全民仙战》2月3日14时合服公告
  12. 报告总监,他...在代码里面 “下毒” 了
  13. 常见数据库id号编码
  14. 如何激发员工的积极性
  15. 表观修饰的“当红炸子鸡” - 组蛋白乳酸化
  16. [笔记] 疯狂JAVA讲义(第3版)第4章 流程控制与数组
  17. 高能同步辐射光源基建攻克首个难关
  18. [句型]二十一、there be 句型 和 情态动词
  19. 数据挖掘算法之时间序列算法(平稳时间序列模型,AR(p),MA(q),(平稳时间序列模型,AR(p),MA(q),ARMA(p,q)模型和非平稳时间序列模型,ARIMA(p,d,q)模型)学习笔记梳理
  20. cad中lisp文件给恶作剧_求大神们帮忙更改下CAD 的lsp 文件 小弟谢谢啦

热门文章

  1. 数据库——常用SQL语句的总结
  2. java aviator_Java 进阶 Aviator 表达式的使用
  3. 平面图的判定定理:Kuratowski定理(库拉托夫斯基定理)
  4. 实验室(宿舍)上ipv6——设置普通路由器
  5. WorkPlus AI助理正式上线!为企业打造定制化的AI私有助理
  6. Discuz论坛安装全过程
  7. (2012年旧文)纪念史蒂夫乔布斯---IT界的普罗米修斯
  8. “一休数学思维”改名“海豚思维”,并完成数千万元Pre-A轮融资...
  9. 总是搜不到想要的内容?Elasticsearch搜索排名优化了解一下
  10. 2020年第十一届蓝桥杯javaB组省赛