已知三维空间中任意单位向量,求以该向量为Z轴的local正交坐标系:

如上图,每个模型都有自己local 坐标系,已知其中一个朝向求另外两个方向。

在autodesk中采用的是Arbitrary Axis Algorith。

http://www.autodesk.com/techpubs/autocad/acadr14/dxf/arbitrary_axis_algorithm_al_u05_c.htm

下面就叙述一下这个算法的原理:

Input:N(x,y,z)

Output:Local_X(x,y,z) Local_Y(x,y,z) Local_Z(x,y,z)

Begin

Local_Z =N ;

单位化Local_Z;

if(abs(Local_Z.x) < 1/64) and (abs (Local_Z.y) < 1/64)//N 不是Z轴abs

{

Local_X = Local_Z 叉乘 (0,1,0);

单位化Local_X;

Local_Y = Local_Z 叉乘 Local_X;

}

else

{

Local_X = Local_Z 叉乘 (0,0,1);

单位化Local_X;

Local_Y = Local_Z 叉乘 Local_X;

}

End

用matlab进行算法验证

function [AxisX AxisY AxisZ]=ArbitraryAxisAlgorithm(AxisZ)
AxisZ =AxisZ/sqrt(sum(AxisZ'*AxisZ));
if(AxisZ()<1e- && AxisZ()<1e- )
AxisX = cross(AxisZ,[ ]');
AxisY = cross(AxisX,AxisZ);
else
AxisX = cross(AxisZ,[ ]');
AxisY = cross(AxisX,AxisZ);
end
x=[ AxisX() ];
y=[ AxisX() ];
z=[ AxisX() ];
%plot3(x,y,z); plot3(x,y,z,'r','linewidth',);
hold on;
x=[ AxisY()]
y=[ AxisY()]
z=[ AxisY()]
figure()
plot3(x,y,z,'g','linewidth',);
hold on;
x=[ AxisZ()]
y=[ AxisZ()]
z=[ AxisZ()]
figure()
plot3(x,y,z,'b','linewidth',);
hold on;
end

运行[x y z]=ArbitraryAxisAlgorithm([1 1 1]')进行验证

任意轴算法 ( Arbitrary Axis Algorithm )的更多相关文章

  1. 谷歌的网页排序算法(PageRank Algorithm)

    本文将介绍谷歌的网页排序算法(PageRank Algorithm),以及它如何从250亿份网页中捞到与你的搜索条件匹配的结果.它的匹配效果如此之好,以至于“谷歌”(google)今天已经成为一个被广 ...

  2. HMM隐马尔科夫算法(Hidden Markov Algorithm)初探

    1. HMM背景 0x1:概率模型 - 用概率分布的方式抽象事物的规律 机器学习最重要的任务,是根据一些已观察到的证据(例如训练样本)来对感兴趣的未知变量(例如类别标记)进行估计和推测. 概率模型(p ...

  3. EM算法(Expectation Maximization Algorithm)

    EM算法(Expectation Maximization Algorithm) 1. 前言   这是本人写的第一篇博客(2013年4月5日发在cnblogs上,现在迁移过来),是学习李航老师的< ...

  4. 维特比算法(Viterbi Algorithm)

      寻找最可能的隐藏状态序列(Finding most probable sequence of hidden states) 对于一个特殊的隐马尔科夫模型(HMM)及一个相应的观察序列,我们常常希望 ...

  5. 图像处理之泛洪填充算法(Flood Fill Algorithm)

    泛洪填充算法(Flood Fill Algorithm) 泛洪填充算法又称洪水填充算法是在很多图形绘制软件中常用的填充算法,最熟悉不过就是 windows paint的油漆桶功能.算法的原理很简单,就 ...

  6. 隐马尔科夫模型,第三种问题解法,维比特算法(biterbi) algorithm python代码

    上篇介绍了隐马尔科夫模型 本文给出关于问题3解决方法,并给出一个例子的python代码 回顾上文,问题3是什么, 下面给出,维比特算法(biterbi) algorithm 下面通过一个具体例子,来说 ...

  7. 图像处理------泛洪填充算法(Flood Fill Algorithm) 油漆桶功能

    泛洪填充算法(Flood Fill Algorithm) 泛洪填充算法又称洪水填充算法是在很多图形绘制软件中常用的填充算法,最熟悉不过就是 windows paint的油漆桶功能.算法的原理很简单,就 ...

  8. 一致性哈希算法(Consistent Hashing Algorithm)

    一致性哈希算法(Consistent Hashing Algorithm) 浅谈一致性Hash原理及应用   在讲一致性Hash之前我们先来讨论一个问题. 问题:现在有亿级用户,每日产生千万级订单,如 ...

  9. 学习 Rust cookbook 之算法篇(algorithm)

    原文作者:suhanyujie 永久链接:https://github.com/suhanyujie/rust-cookbook-note 博客链接:https://ishenghuo.cnblogs ...

随机推荐

  1. JVM垃圾回收理论知识

  2. Scoket简介

    我们很多人都听说过Socket编程也称网络编程,在我们当今的社会中网络已经深入到我们的生活中了,计算机的网络通信也成为我们生活中必不可少的一部分.而实现我们网络通信就得依靠网络编程,让我们的计算机之间 ...

  3. SQL Server 表字段值转列名 示例

    前几天,同事问我怎样把字段值转换成字段列,就写了一个最简单的Demo分享一下. 代码如下: -- 创建测试表以及添加测试数据create table #temp(a money,b varchar(1 ...

  4. EL标签和JSTL标签---JSP页面的应用

    ====EL(Expression Language)表达式语言:用于计算和输出存储在标志位置(page.request.session.application)的java对象的值: 1.开启和关闭E ...

  5. 中文翻译:pjsip教程(三)之ICE stream transport的使用

    1:pjsip教程(一)之PJNATH简介 2:pjsip教程(二)之ICE穿越打洞:Interactive Connectivity Establishment简介 3:pjsip教程(三)之ICE ...

  6. MFC中cannot find the definition (implementation) of this function 解决方法

    问题:使用vc6 在点击左侧class view中的一个方法实现时出现下面错误:    cannot find the definition (implementation) of this func ...

  7. ul ol dl

    1.ul是无序列表,也就是说没有排列限制可以随意加li: <ul> <li>可以随意放置</li> <li>可以随意放置</li> < ...

  8. js 保留小数位数

    eg: var num=3.1415926 小数位处理:num.toFixed(n)      n:小数位数

  9. H5非主体结构元素

    1.header元素:页面中一个内容区块或整个页面的标题: 具有引导和导航作用的结构元素,通常用来放置整个页面或页面内的一个内容区块的标题,也可以包含数据表格.搜索表单或相关的logo图片. 一个网页 ...

  10. 通过try、except和else的使用来使Python程序更加“强壮”

    在执行的程序中,难免会碰到因为一些原因如输入输出导致致命性错误产生的情况(如因为输入的文件名错误而导致无法运行相关的代码.).此时你不希望程序直接挂掉,而是通过显示一些信息,使其平稳的结束.此时,就可 ...