Origin 3D方框线

因为场景需要,很多时候我们得把3D图的框线描出来。

方案一

这个时候双击坐标轴,勾上“每个方向使用一条轴”,这样好调些:

可以直接把对应位置的轴刻度去掉(显示轴线和刻度线,主刻度、次刻度样式选无),当方框线:

其实,长方体有8条边,通过双轴的方式,前、后、下、 上、左、右轴加起来也就6条边,另外2条边得通过特殊刻度线去加了:

方案二

直接用立方体框线:

优点:在对框线没有更多要求的情况下非常方便;缺点:各条线是一样的,不支持更细节的自定义调整。

 

进阶

按照右边的参数去配置图,就能达到左边这种效果。有种“深度学习感知”的高级感

也可以留一个平面,通过对比进行突出:

参考程序

%zhouzhichao
%25年7月2日
%生成单个信号的时频图便于分析

clear
clc
close all

list = [  2,   6;
    0.3,   4;
    0.17 , 2;
    0.125, 0;
    0.07, -2;
    0.05, -4;];

base = 'D:\实验室\论文\论文-多信号参数估计\JCR3\Principle\微调原理\diff_snr\snr_dataset';
index = [0.1,0.2,0.3,0.4];
start_n = 231;

labels_initial = zeros(4, 5); % 初始化标签,4行5列
%SFM,BPSK,LFM,FRANK分别对应0,1,2,3
%SFM
labels_initial(1,1)=0;labels_initial(1,2)=0.518;labels_initial(1,4) = 0.775;
%BPSK
labels_initial(2,1)=1;labels_initial(2,2)=0.518;labels_initial(2,4) = 0.775;
%LFM
labels_initial(3,1)=2;labels_initial(3,2)=0.518;labels_initial(3,4) = 0.775;
%FRANK
labels_initial(4,1)=3;labels_initial(4,2)=0.518;labels_initial(4,4) = 0.775;

num = 1;

%信号生成:
index_rd = index(randperm(length(index)));%给每类信号随机分配频点
[s1,h1] = mysigduo(0.25,'SFM');
[s2,h2] = mysigduo(index_rd(2),'BPSK');
[s3,h3] = mysigduo(index_rd(3),'LFM');
[s4,h4] = mysigduo(index_rd(4),'FRANK');

% S_raw = 3.1*s1 + 2.5*s2 + s3 + 2.5*s4;
S_raw = 3.1*s1;

labels = labels_initial; % 初始化标签,4行5列
%SFM,BPSK,LFM,FRANK分别对应0,1,2,3
%SFM
labels(1,3) = (index_rd(1)*2*535+49)/656;labels(1,5) = h1*2*535/656;
%BPSK
labels(2,3) = (index_rd(2)*2*535+49)/656;labels(2,5) = 0.034;
%LFM
labels(3,3) = (index_rd(3)*2*535+49)/656;labels(3,5) = h3*2*535/656;
%FRANK
labels(4,3) = (index_rd(4)*2*535+49)/656;labels(4,5) = 0.04;


snr_i=1;

%信号加噪:
snr = list(snr_i, 2);

disp(["n: ",num, "  snr: ",snr])

S = list(snr_i, 1)*S_raw + ones(size(S_raw));


%生成时频图:
[tfr,t,f] = tfrctfd2(S);

%生成3D时频图:
% 获取幅度
tfr_asb = abs(tfr);

% 计算最大值,用于caxis
level = max(max(tfr_asb(:, 200:800)));
new_t = t / 1000;  % 将t轴的值缩小1000倍
tfr_asb = tfr_asb/max(tfr_asb(:));
% 创建三维图形
figure;
surf(new_t, f, tfr_asb, 'EdgeColor', 'none'); % 使用surf来创建3D图

xlim([0,1])
ylim([0,0.5])
% 设置x轴的刻度

% 设置轴标签
xlabel('Normalized Time');
ylabel('Normalized Frequency');
zlabel('Normalized Amplitude');

% 调整视角
view(3); % 设置为3D视角

% 可选:暂停使图形实时更新
pause(0.05);

set(gca, 'FontName', 'Times New Roman');

save("D:\实验室\论文\论文-多信号参数估计\JCR3\Principle\Mechanisms\tfr_asb.mat",'tfr_asb')

内容概要:本文档详细介绍了基于MATLAB实现的无人机三维路径规划项目,核心算法采用蒙特卡罗树搜索(MCTS)。项目旨在解决无人机在复杂三维环境中自主路径规划的问题,通过MCTS的随机模拟与渐进式搜索机制,实现高效、智能化的路径规划。项目不仅考虑静态环境建模,还集成了障碍物检测与避障机制,确保无人机飞行的安全性和效率。文档涵盖了从环境准备、数据处理、算法设计与实现、模型训练与预测、性能评估到GUI界面设计的完整流程,并提供了详细的代码示例。此外,项目采用模块化设计,支持多无人机协同路径规划、动态环境实时路径重规划等未来改进方向。 适合人群:具备一定编程基础,特别是熟悉MATLAB和无人机技术的研发人员;从事无人机路径规划、智能导航系统开发的工程师;对MCTS算法感兴趣的算法研究人员。 使用场景及目标:①理解MCTS算法在三维路径规划中的应用;②掌握基于MATLAB的无人机路径规划项目开发全流程;③学习如何通过MCTS算法优化无人机在复杂环境中的飞行路径,提高飞行安全性和效率;④为后续多无人机协同规划、动态环境实时调整等高级应用打下基础。 其他说明:项目不仅提供了详细的理论解释和技术实现,还特别关注了实际应用中的挑战和解决方案。例如,通过多阶段优化与迭代增强机制提升路径质量,结合环境建模与障碍物感知保障路径安全,利用GPU加速推理提升计算效率等。此外,项目还强调了代码模块化与调试便利性,便于后续功能扩展和性能优化。项目未来改进方向包括引入深度强化学习辅助路径规划、扩展至多无人机协同路径规划、增强动态环境实时路径重规划能力等,展示了广阔的应用前景和发展潜力。
### UG软件草图模块二次开发方法 在Siemens NX(原名UG)的草图模块进行二次开发时,主要依赖于NXOpen API来实现自动化操作和扩展功能。以下是关于草图模块二次开发的核心知识点: #### 1. **草图对象及其句柄** 在NX中,`tag_t` 是用于标识各种对象的数据类型[^3]。对于草图模块而言,每条曲线、几何约束或参数化表达式都有其唯一的 `tag_t` 句柄。这些句柄可以通过特定的API函数获取并进一步操作。 例如,在创建一条直线后,可以使用如下代码片段保存该直线的句柄以便后续引用: ```cpp #include <nxopen/Session.hxx> #include <nxopen/Sketch.hxx> // 假设已有一个激活的草图实例 sketchInstance Sketch *sketchInstance; Tag_t lineHandle; lineHandle = sketchInstance->CreateLine(startPointX, startPointY, endPointX, endPointY); ``` #### 2. **草图创建与编辑** 通过NXOpen API,开发者可以直接创建新的草图或者修改现有草图的内容。具体的操作包括但不限于定义坐标系、绘制基本图形(如线段、圆弧)、施加几何约束等。 下面是一个简单示例,展示如何利用C++语言创建一个新的草图,并在其内部添加一条水平线段: ```cpp #include <nxopen/Part.hxx> #include <nxopen/SketchCollection.hxx> void CreateHorizontalLineInSketch(Part* partInstance) { SketchCollection* sketches = partInstance->GetSketches(); // 创建新草图 Point3d origin(0., 0., 0.); Vector3d normalVector(0., 0., 1.); Tag_t newSketchHandle = sketches->Create(origin, normalVector); // 获取当前草图实例 Sketch* currentSketch = Session::GetSession()->Assemblies()->WorkAssembly()->FindObject(newSketchHandle); // 添加水平线到草图 double startX = -5.; double startY = 0.; double endX = 5.; double endY = 0.; currentSketch->CreateLine(startX, startY, endX, endY); } ``` 上述代码展示了如何基于指定的工作部件(part),新建一个位于XY平面内的草图,并向其中加入一段跨越负正方向的水平直线[^2]。 #### 3. **调试与错误处理** 为了确保程序运行顺利,建议采用结构化的异常捕获机制。当尝试访问不存在的对象或是执行非法命令时,可能会抛出runtime exceptions。因此,在实际编码阶段应充分考虑边界条件及潜在风险点。 此外,合理运用日志记录也是提升维护性和排查问题效率的有效手段之一。例如,借助标准库 `<iostream>` 或第三方框架输出关键状态信息至终端窗口或文件存储介质上。 #### 4. **性能优化策略** 针对大规模模型或频繁交互场景下的应用需求,需特别关注算法的时间复杂度以及内存占用情况。一方面可通过减少不必要的循环迭代次数降低计算量;另一方面则要避免过度分配动态数组空间造成资源浪费[^1]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值