matlab 绘制椭圆锥波束指向示意图
生活随笔
收集整理的這篇文章主要介紹了
matlab 绘制椭圆锥波束指向示意图
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
參考了matlab 繪制任意方向和位置的空間圓錐體中繪制圓錐的思路,在此基礎上加了我需要的應用。就是繪制波束掃描示意圖。
1 原理
- 根據波束寬度得到在歸一化威力值上的弧長。
- 然后根據方位和俯仰向弧長產生一個模擬波束參數的圓柱的坐標點。
- 將圓柱以半徑修正高度坐標,轉換成圓錐。
- 修正因為繞軸旋轉帶來的波束角度偏差。
- 將波束旋轉到波束指向位置。
cylinder
[X,Y,Z] = cylinder(r,n) 返回具有指定剖面曲線 r 和圓周上 n 個等距點的圓柱的 x、y 和 z 坐標。該函數以三個 (n+1)×(n+1) 矩陣形式返回 x、y 和 z 坐標。
makehgtform
使用 makehgtform 創建用于轉換、縮放和旋轉圖形對象的變換矩陣。M = makehgtform(‘axisrotate’,[ax,ay,az],t) 圍繞軸 [ax ay az] 旋轉 t 弧度。
rotate
將對象根據給定的坐標軸旋轉給定的角度。
rotate(h,direction,alpha,origin) 將圖形對象 h 旋轉 alpha 度。指定 h 為曲面、補片、線條、文本或圖像對象。direction 是一個二元素或三元素向量,它與旋轉軸原點共同確定旋轉軸。旋轉軸的原點為origin,默認原點是圖框中心。
2 效果
示例:產生指向[30,30],波束寬度為[5,8],歸一化威力為1的波束1 以及 指向[15,7.5],波束寬度為[15,15],歸一化威力為0.5的波束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 绘制椭圆锥波束指向示意图的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 平面直角坐标系中的旋转公式_数控转台中任
- 下一篇: insert into 批量导入数据的案