热门标签 | HotTags
当前位置:  开发笔记 > 人工智能 > 正文

三维坐标系中的两个相同的三角形,如何旋转其中一个,使其和另一个平行

三维坐标系中任意摆放着的两个相同的三角形,如何旋转其中一个,使其和另一个平行?每个三角形的坐标都是已知量。这基本上是个数学问题,还望有知道算法的大侠指点!
三维坐标系中任意摆放着的两个相同的三角形,如何旋转其中一个,使其和另一个平行?


每个三角形的坐标都是已知量。


这基本上是个数学问题,还望有知道算法的大侠指点!

92 个解决方案

#1


求同一长度的两端点的x坐标的差值,乘以一个角a的cos值等于另一个三角形的同一长度边的两端点的x坐标差值

#2


引用 1 楼 xiuxianshen 的回复:
求同一长度的两端点的x坐标的差值,乘以一个角a的cos值等于另一个三角形的同一长度边的两端点的x坐标差值

这个角"a"是什么呢,a如何在这个x,y,z构成的三维坐标系中表示呢?

#3


补充一下,所谓的平行,是两个三角形相同的边都平行

#4


说的再好理解一下,就是平行后的两个三角形,可以只通过移动,而无需选择合并成一个三角形

#5


要旋转的话首先要确定你旋转的中心轴是什么,轴定下来以后就可以确定不动点,然后根据两三角面的法向量了计算旋转角度

#6


引用 5 楼 wuhuwy 的回复:
要旋转的话首先要确定你旋转的中心轴是什么,轴定下来以后就可以确定不动点,然后根据两三角面的法向量了计算旋转角度

轴是x,y,z坐标轴

#7


用同一长度的两端点的x坐标的差值,乘以一个角a的cos值等于另一个三角形的同一长度边的两端点的x坐标差值

#8


引用 7 楼 yincheng01 的回复:
用同一长度的两端点的x坐标的差值,乘以一个角a的cos值等于另一个三角形的同一长度边的两端点的x坐标差值

二楼的朋友也是用的这种方法,但是我不太明白这种方法怎么在程序中表示。能跟我说一下为什么这么做吗,或者给我相关的资料我自己看也行。多谢啦!

#9


Mark先。

#10


友情支持,三颗心关照,up~up~up~!!

#11


先算出两个三角形的角度差,然后在每个轴上用三角函数进行任意角度旋转的运算。具体函数的定义是:一个点(,,)饶某个轴旋转X度后的坐标。然后对三角形的每个点调用这个函数就行了。还要考虑坐标精度,建议函数写成浮点的
还有个问题,全等还可以是镜像啊,不一定能够完全重合的。

#12


引用 11 楼 zhoujk 的回复:
先算出两个三角形的角度差,然后在每个轴上用三角函数进行任意角度旋转的运算。具体函数的定义是:一个点(,,)饶某个轴旋转X度后的坐标。然后对三角形的每个点调用这个函数就行了。还要考虑坐标精度,建议函数写成浮点的
还有个问题,全等还可以是镜像啊,不一定能够完全重合的。

谢谢ls朋友的热心帮助,不过还是有2个问题想问一下:
1、怎么算3维坐标系下的两个三角形的角度差呢,这个角度差是指相对x、y还是z轴呢,或者还是三角形的某条边呢?
2、“全等还是可以是镜像”,这个“镜像”是什么意思啊?

#13


1.3D的旋转和2D的不一样,先把一个平面上的角度旋转正确了,再从另一个角度旋转,可能会导致原来的平面上的角度有变化。3D的东东没玩过,还真不太知道
2.形状 [_  和  _] 应该是全等吧,但是不能重合哈! 

#14


引用 13 楼 zhoujk 的回复:
1.3D的旋转和2D的不一样,先把一个平面上的角度旋转正确了,再从另一个角度旋转,可能会导致原来的平面上的角度有变化。3D的东东没玩过,还真不太知道
2.形状 [_ 和 _] 应该是全等吧,但是不能重合哈!

谢谢了!还是希望有更容易编程实现的方法出现:)

#15


楼主的旋转,是什么意思,是可以在三维空间里面,可以按照任意方向、以任意点为中心的旋转么?
如果是这样,楼主这样做:
1、是让两个三角形所的面先成平行的两个平面!
2、找到对应的顶点,比如三角形分别是abc与 ABC;其中,aA,bB,cC是互相对应的顶点!
3、以A点为基准点,用平移法,将三角形abc移动到ABC上,A与a重合,记录移动量v.
4、求出ab与AB的角度,旋转一下(如果需要角度的话,这时需要记录)。
5、将三角形abc平移-v

#16


1中,是平面间的旋转
4中,旋转后,两个三角形应该重复!

#17


不懂 路过 来学一下个

#18


该回复于2010-05-07 16:34:37被版主删除

#19


俺脚着得先给顶点进行编号,笨方法如下

1)三角形A为标准,将顺时针给顶点编号,并计算每个顶点所对应的角度。
2)随机取三角形B的一个顶点为起点,顺时针编号,计算每个顶点所对应的角度,如果与三角形A不一致,那么轮换顶点编号,直到两个三角形的顶点编号一致。


然后就是旋转了。

#20


没看见三维,前面发的请无视。

#21


不懂 路过 来学一下个

#22


关注更好的方法。UP```

#23


先让两个的法向量平行
然后再以法向量为轴旋转
过程:...

#24


法向量的算法:两相交向量叉乘
然后就是通过向量夹角构造旋转矩阵1,...

#25


条件欠定,解不唯一。

#26


问题问得不明不白啊,你是直接要最后的坐标还是要一步步先后以某个点或边做旋转达到平行呢?

#27


问题问得不明不白啊,你是直接要最后的坐标还是要一步步先后以某个点或边做旋转达到平行呢?

#28


灌水~~~~~~~~~~~~~~~~~~~~

#29


灌水~~~~~~~~~~~~~~~~~~~~

#30


三角形ABC的法线向量为N1,三角形DEF的法线向量为N2。
N1叉乘N2得到公垂线N3.
然后在求得N1到N2的夹角alpha。
由N3与alpha得到旋转矩阵或者旋转四元数可以使三角形ABC旋转至与DEF平行。
补充:为了计算方便,可以把N1和N2先单位化。
关于求三角形法线向量就不多说了,两个边的向量叉乘即可。
个人愚见,还望有更优算法的达人指正。

#31


引用 3 楼 jiabin_007 的回复:
补充一下,所谓的平行,是两个三角形相同的边都平行

这样的话,根据线性变换的矩阵就是变换后的基向量。
对三角形ABC和三角形DEF建立局部坐标系,使得这2个三角形相同的顶点有相同的坐标值,坐标轴必须是基向量。
计算三角形ABC的局部坐标系的坐标轴在三角形DEF局部坐标系坐标轴的坐标。
由这3个坐标组成的矩阵M就是假设原来三角形ABC与DEF平行到当前三角形ABC的变换矩阵。
所以,求M的逆矩阵即可。
由于M显然是旋转变换,所以M的逆矩阵就是M的转置矩阵。
M的转置矩阵就可以把三角形ABC直接变换到与DEF平行。
个人愚见,还望有更优算法的达人指正。

#32


ddddddddddddddddddd

#33


要证明两个三角形平行,就是证明一个三角形的两条直线与两外一个三角形所在的平面平行。
所以这个问题就转化为分别证明两条直线与一个平面平行皆可。

下面是证明一条直线与一个平面平行的。
直线平行于平面,则直线的方向向量垂直于平面的法向量。 
在空间直角坐标系中,平面的一般式为:Ax+By+Cz+D=0, 
直线的一般方程(两个平面的交线)为: 
A1x+B1y+C1z+D1=0 
A2x+B2y+C2z+D2=0 
可知:平面的法向量为:(A,B,C);直线的方向向量为: 
(A1,B1,C1)X(A2,B2,C2),若直线平行于平面,则两向量垂直 (X表示叉乘) 
若直线为点向式:(x-a)/m=(y-b)/n=(z-c)/p,则直线的方向向量为:(m,p,q) 
例:平面方程为:-x-2y+z+3=0,直线方程为: 
(x-5)/2=(y-3)/3=(z-7)/8,则平面的法向量为: 
(-1,-2,1),直线的方向向量为:(2,3,8) 
因为:(-1,-2,1)*(2,3,8)=-2-6+8=0 
所以两向量垂直,所以直线平行于平面 

#34


要证明两个三角形平行,就是证明一个三角形的两条直线与两外一个三角形所在的平面平行。
所以这个问题就转化为分别证明两条直线与一个平面平行皆可。

下面是证明一条直线与一个平面平行的。
直线平行于平面,则直线的方向向量垂直于平面的法向量。 
在空间直角坐标系中,平面的一般式为:Ax+By+Cz+D=0, 
直线的一般方程(两个平面的交线)为: 
A1x+B1y+C1z+D1=0 
A2x+B2y+C2z+D2=0 
可知:平面的法向量为:(A,B,C);直线的方向向量为: 
(A1,B1,C1)X(A2,B2,C2),若直线平行于平面,则两向量垂直 (X表示叉乘) 
若直线为点向式:(x-a)/m=(y-b)/n=(z-c)/p,则直线的方向向量为:(m,p,q) 
例:平面方程为:-x-2y+z+3=0,直线方程为: 
(x-5)/2=(y-3)/3=(z-7)/8,则平面的法向量为: 
(-1,-2,1),直线的方向向量为:(2,3,8) 
因为:(-1,-2,1)*(2,3,8)=-2-6+8=0 
所以两向量垂直,所以直线平行于平面  

#35


我也来学习了,些许

#36


如果是一样的话
只要算出其中一个对应的点的距离,然后可以算出另外两个点的坐标
比如A三角形坐标(0,0,0),(0,1,1),(0,0,2)
如果B三角形的的一个坐标为(1,0,0)
那么另外两个点的坐标就为(1,1,1),(1,0,2)

#37


1中,是平面间的旋转
4中,旋转后,两个三角形应该重复!

#38


gfhfgh 

#39


还不清楚,

#40


我记得旋转问题都是构造旋转矩阵来解决,不过用矩阵来旋转会造成万向锁的问题,最好用四元数来旋转。

#41


先留个脚印。

#42


不懂,学习学习,呵呵。这个问题有意思。

#43


该回复于2010-12-02 13:04:18被版主删除

#44


一个角的面平等就行了。。

#45


看看。。

#46


当然要先通过数学计算知道计算过程是怎样的才好编程啊。程序中的算法都是在数学公式的基础上的。

#47


想了一下,2维3维都一样的,编好号,然后某点不动,算一下其他两点的新位置。

#48


不懂啊!!!

#49


是不太懂啊!

#50


不懂  不清楚

推荐阅读
author-avatar
孝敏敏__216
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有