【NX】NX二次开发中如何绕固定轴旋转矢量

news2024/11/17 14:20:11

如何让任意矢量绕着任意轴旋转一定角度,得到新的矢量,在NX中,通过矩阵运算,可以直接得到目标向量。

 

直接上代码:

AUTUMOON::AUTUMOONMathVector3d CAMToolPathToolkit::RotateVector(const AUTUMOONMathVector3d &ivecSrc,
                                                        const AUTUMOONMathVector3d ivecAxis,
                                                        const double &dAngle /*= 90.0*/)
{
    double rotation_axis[3] = {0};
    double rotation_angle = PAI * dAngle / 180.0;
    double mtx[9] = {0};

    ivecAxis.Array(rotation_axis);

    UF_MTX3_rotate_about_axis(rotation_axis, rotation_angle, mtx);

    double arrSrc[3] = {0};
    ivecSrc.Array(arrSrc);
    double arrDst[3] = {0};

    UF_MTX3_vec_multiply(arrSrc, mtx, arrDst);

    return AUTUMOONMathVector3d(arrDst[0], arrDst[1], arrDst[2]);
}

项目原因部分不重要的代码实现无法公开,可以自己考虑实现,或者查阅资料,调用UG自带的函数。

在知道可以调用UG函数之前,我实现了简单的平面上的绕固定点旋转,其基本思想就是二维上的三角函数运算,在这里也给出相关的代码吧,仅供参考:

AUTUMOON::AUTUMOONMathVector3d CAMToolPathToolkit::RotateVector(const AUTUMOONMathVector3d &ivecSrc,
                                                        const AUTUMOONMathVector3d ivecAxis,
                                                        const double &dAngle /*= 90.0*/)
{
    AUTUMOONMathVector3d vecDst(ivecSrc);

    double dVecLength = ivecSrc.Length();
    if (fabs(dVecLength) < 0.001)
    {
        return vecDst;
    }

    vecDst.UnitiZation();

    if (fabs(ivecSrc.Z) < 0.001 && ivecAxis.IsParallel(AUTUMOONMathVector3d::ZVector()))
    {
        // 计算原始的坐标
        double dX = vecDst.X;
        double dY = vecDst.Y;

        double dTheta = atan2(dY, dX);

        double dAddAngle = dAngle / 180.0 * PAI;

        double dNewAngle = dTheta + dAddAngle;

        double dNewX = dVecLength * cos(dNewAngle);
        double dNewY = dVecLength * sin(dNewAngle);

        vecDst = AUTUMOONMathVector3d(dNewX, dNewY, 0.0);
    }

    if (fabs(ivecSrc.X) < 0.001 && ivecAxis.IsParallel(AUTUMOONMathVector3d::XVector()))
    {
        double dX = vecDst.Y;
        double dY = vecDst.Z;

        double dTheta = atan2(dY, dX);

        double dAddAngle = dAngle / 180.0 * PAI;

        double dNewAngle = dTheta + dAddAngle;

        double dNewY = dVecLength * cos(dNewAngle);
        double dNewZ = dVecLength * sin(dNewAngle);

        vecDst = AUTUMOONMathVector3d(0.0, dNewY, dNewZ);
    }

    if (fabs(ivecSrc.Y) < 0.001 && ivecAxis.IsParallel(AUTUMOONMathVector3d::YVector()))
    {
        double dX = vecDst.X;
        double dY = vecDst.Z;

        double dTheta = atan2(dY, dX);

        double dAddAngle = dAngle / 180.0 * PAI;

        double dNewAngle = dTheta + dAddAngle;

        double dNewX = dVecLength * cos(dNewAngle);
        double dNewZ = dVecLength * sin(dNewAngle);

        vecDst = AUTUMOONMathVector3d(dNewX, 0.0, dNewZ);
    }

    return vecDst;
}

欢迎交流与讨论,欢迎留言或者私信我寻求帮助,谢谢。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/888747.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

版本控制工具Git集成IDEA的使用(超详细)

目录 一、团队内协作和跨团队协作讲述 1、团队内协作 2、跨团队协作 二、Gitee的使用 1、注册网站会员 2、用户中心 3、创建远程仓库 4、配置SSH免密登录 三、集成IDEA&#xff0c;Git项目搭建 1、本地仓库搭建 1&#xff09;创建一个新项目 2&#xff09;打开终端&…

windos安装oracle数据库图文教程

首先准备安装包&#xff0c; 链接&#xff1a;https://pan.baidu.com/s/17ltLy9TCwb5fAlaWq3hW4g 提取码&#xff1a;dsmd 这个版本是11.2&#xff0c;如果需要其他版本可以通过官网下载。 下载完成之后&#xff0c;保存路径不要有中文。 右键解压&#xff0c;会多出来个data…

重建与突破,探讨全链游戏的现在与未来

全链游戏&#xff08;On-Chain Game&#xff09;是指将游戏内资产通过虚拟货币或 NFT 形式记录上链的游戏类型。除此以外&#xff0c;游戏的状态存储、计算与执行等皆被部署在链上&#xff0c;目的是为用户打造沉浸式、全方位的游戏体验&#xff0c;超越传统游戏玩家被动控制的…

USB2.0与USB3.0接口的PCB布局布线要求

USB是通用串行总线的英文缩写&#xff0c;是连接外部装置的一个串口总线标准&#xff0c;也是一种输入输出接口的技术规范&#xff0c;被广泛地应用于个人电脑和移动设备等信息通迅产品&#xff0c;并扩展到摄影器材&#xff0c;数字电视&#xff08;机顶盒&#xff09;、游戏机…

智能仓储管理系统(自动化仓库管理解决方案)

企业实际的仓储管理中&#xff0c;往往会出现那样这样的错误&#xff0c;归根结底&#xff0c;主要是由于没使用合适的仓库管理工具。相反&#xff0c;人工使用合适的仓库管理工具&#xff0c;不仅可以在日常仓库管理方法中根据采集到的产品信息数据&#xff0c;大大地提高管理…

Leangoo领歌免费敏捷看板工具做—用户反馈管理

一个产品在面向市场之后势必会收到来自各个渠道的用户反馈。好的反馈有利于公司品牌的建立&#xff0c;挑剔和负面反馈可以帮助我们了解到用户最真是的需求和使用场景&#xff0c;有利于优化产品提高服务。更加能够提升用户的粘性。 在进行用户反馈管理时&#xff0c;用户反馈…

selenium 选定ul-li下拉选项中某个指定选项

场景&#xff1a;selenium的下拉选项是ul-li模式&#xff0c;选定某个指定的选项。 from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 显示等待def select_li(self, text, *ul_locator):"…

随手笔记——Pose Graph理论以及g2o实现

随手笔记——Pose Graph理论以及g2o实现 说明源代码CMakeLists.txt 说明 源代码 #include <iostream> #include <fstream> #include <string>#include <g2o/types/slam3d/types_slam3d.h> #include <g2o/core/block_solver.h> #include <g2o…

Python实现两个主机的数据库同步

实现两个主机间mysql数据同步 import pymysql import pandas as pd from sqlalchemy import create_engineHOST_SUBOR_SYNCLIST (account_t, measure_system_t) # 需要更新的数据表def syncSqldata(source_db, target_db):for table in HOST_SUBOR_SYNCLIST :query "SE…

小米有品众筹,小米上新3D打印机!米家3D打印机购买前必看的注意事项!

小米推出3D打印机&#xff0c;米家3D打印机购买前必看 3D打印机在人们的生活中发挥着巨大的作用&#xff0c;无论是在科研实验室还是家庭工作室&#xff0c;它们正以惊人的速度改变着我们的世界。最近&#xff0c;科技巨头小米也加入了这一领域&#xff0c;推出了一款全新的&q…

从零实战SLAM-第十课(回环检测与建图)(完)

在七月算法报的班&#xff0c;老师讲的蛮好。好记性不如烂笔头&#xff0c;关键内容还是记录一下吧&#xff0c;课程入口&#xff0c;感兴趣的同学可以学习一下。 --------------------------------------------------------------------------------------------------------…

未来数字银行的样子

对银行长期发展来讲&#xff0c;这意味着将关闭和减少 低效率的实体分行&#xff0c;加速向数字化发展。实现成本节省和 IT 预算提效的需求&#xff0c;将为数字柜台和银行代理点创造新的机遇。 一个崭新的世界&#xff1a;未来数字银行趋势图 现在是银行迎头赶上并为客户提供超…

NFTScan NFT API 在 DID Protocol 开发中的应用

自互联网发展以来&#xff0c;Web2.0 时代产生了网络社会&#xff0c;社会已经不再局限于地理边界&#xff0c;而 Web 3.0 引入了去中心化的理念&#xff0c;强调个体数据隐私和可信互操作性。在这个新的时代中&#xff0c;去中心化身份&#xff08;Decentralized Identifier 即…

百万奖金、大厂offer请你接收!

第三届中国移动“梧桐杯”大数据创新大赛 火热进行中 报名速来~ 今年大学生就业形势格外严峻&#xff1a;全国高校毕业生人数破千万为历年来最多&#xff0c;校招竞争激烈&#xff0c;高薪岗位宁缺毋滥。想弯道超车拿到心仪的offer&#xff1f;仅靠“求神拜佛”对着神明念自己…

生信豆芽菜-差异基因富集分析的圈图

网址&#xff1a;http://www.sxdyc.com/visualsEnrichCirplot 1、数据准备 准备一个基因集的文件 2、选择富集分析的数据库&#xff0c;同时输入展示top几的条目&#xff0c;选择颜色&#xff0c;如果是GO的话选择三个颜色&#xff0c;如果是KEGG选择一个&#xff0c;如果是G…

SpringBoot系列之基于Jersey实现RESTFul风格文件上传API

前言 JAX-RS&#xff1a;JAX-RS是可以用可以用于实现RESTFul应用程序的JAVA API&#xff0c;给开发者提供了一系列的RESTFul注解Jersey&#xff1a;是基于JAX-RX API的实现框架&#xff0c;用于实现RESTful Web 服务的开源框架。 JAX-RX常用的注解&#xff1a; javax.ws.rs.Pa…

ui设计师个人年终工作总结2020最新范文5篇

ui设计师个人年终工作总结(一) 我于20年x育人x日成为公司的试用员工&#xff0c;安排在技术研发中心担任UI界面设计一职&#xff0c;现将我的工作情况分为三个阶段来总结如下汇报&#xff1a; 一、萌芽阶段 记得初次应聘时&#xff0c;我对公司的认识仅仅局限于行业之一&#x…

基于 KubeSphere 的应用容器化在智能网联汽车领域的实践

公司简介 某国家级智能网联汽车研究中心成立于 2018 年&#xff0c;是担当产业发展咨询与建议、共性技术研发中心、创新成果转化的国家级创新平台&#xff0c;旨在提高我国在智能网联汽车及相关产业在全球价值链中的地位。 目前着力建设基于大数据与云计算的智能汽车云端运营…

港联证券|油价上涨股票是涨还是跌?油价上涨股票是涨还是跌?

油价可以说是股市开展的晴雨表&#xff0c;对股市后期的开展有较大的的影响。那么油价上涨股票是涨仍是跌&#xff1f;下面就由港联证券为我们剖析&#xff1a; 油价上涨关于某些方面的股票来说是利好的&#xff0c;比如新能源产业和石油挖掘类职业等&#xff0c;关于某些股票还…

【Linux】进程创建、终止、等待、替换

进程控制 进程创建进程终止终止进程的方法 进程等待进程替换 进程创建 fork函数&#xff0c;它是从一个已存在的进程中创建一个新的进程。新的进程为子进程&#xff0c;而原进程为它的父进程。 fork函数的头文件为#include <unistd.h> 它的返回值为pid_t为无符号整型 在L…