作者:孝敏敏__216 | 来源:互联网 | 2023-05-18 11:29
三维坐标系中任意摆放着的两个相同的三角形,如何旋转其中一个,使其和另一个平行?
每个三角形的坐标都是已知量。
这基本上是个数学问题,还望有知道算法的大侠指点!
92 个解决方案
求同一长度的两端点的x坐标的差值,乘以一个角a的cos值等于另一个三角形的同一长度边的两端点的x坐标差值
说的再好理解一下,就是平行后的两个三角形,可以只通过移动,而无需选择合并成一个三角形
要旋转的话首先要确定你旋转的中心轴是什么,轴定下来以后就可以确定不动点,然后根据两三角面的法向量了计算旋转角度
用同一长度的两端点的x坐标的差值,乘以一个角a的cos值等于另一个三角形的同一长度边的两端点的x坐标差值
先算出两个三角形的角度差,然后在每个轴上用三角函数进行任意角度旋转的运算。具体函数的定义是:一个点(,,)饶某个轴旋转X度后的坐标。然后对三角形的每个点调用这个函数就行了。还要考虑坐标精度,建议函数写成浮点的
还有个问题,全等还可以是镜像啊,不一定能够完全重合的。
1.3D的旋转和2D的不一样,先把一个平面上的角度旋转正确了,再从另一个角度旋转,可能会导致原来的平面上的角度有变化。3D的东东没玩过,还真不太知道
2.形状 [_ 和 _] 应该是全等吧,但是不能重合哈!
楼主的旋转,是什么意思,是可以在三维空间里面,可以按照任意方向、以任意点为中心的旋转么?
如果是这样,楼主这样做:
1、是让两个三角形所的面先成平行的两个平面!
2、找到对应的顶点,比如三角形分别是abc与 ABC;其中,aA,bB,cC是互相对应的顶点!
3、以A点为基准点,用平移法,将三角形abc移动到ABC上,A与a重合,记录移动量v.
4、求出ab与AB的角度,旋转一下(如果需要角度的话,这时需要记录)。
5、将三角形abc平移-v
1中,是平面间的旋转
4中,旋转后,两个三角形应该重复!
俺脚着得先给顶点进行编号,笨方法如下
1)三角形A为标准,将顺时针给顶点编号,并计算每个顶点所对应的角度。
2)随机取三角形B的一个顶点为起点,顺时针编号,计算每个顶点所对应的角度,如果与三角形A不一致,那么轮换顶点编号,直到两个三角形的顶点编号一致。
然后就是旋转了。
先让两个的法向量平行
然后再以法向量为轴旋转
过程:...
法向量的算法:两相交向量叉乘
然后就是通过向量夹角构造旋转矩阵1,...
问题问得不明不白啊,你是直接要最后的坐标还是要一步步先后以某个点或边做旋转达到平行呢?
问题问得不明不白啊,你是直接要最后的坐标还是要一步步先后以某个点或边做旋转达到平行呢?
三角形ABC的法线向量为N1,三角形DEF的法线向量为N2。
N1叉乘N2得到公垂线N3.
然后在求得N1到N2的夹角alpha。
由N3与alpha得到旋转矩阵或者旋转四元数可以使三角形ABC旋转至与DEF平行。
补充:为了计算方便,可以把N1和N2先单位化。
关于求三角形法线向量就不多说了,两个边的向量叉乘即可。
个人愚见,还望有更优算法的达人指正。
要证明两个三角形平行,就是证明一个三角形的两条直线与两外一个三角形所在的平面平行。
所以这个问题就转化为分别证明两条直线与一个平面平行皆可。
下面是证明一条直线与一个平面平行的。
直线平行于平面,则直线的方向向量垂直于平面的法向量。
在空间直角坐标系中,平面的一般式为: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
所以两向量垂直,所以直线平行于平面
要证明两个三角形平行,就是证明一个三角形的两条直线与两外一个三角形所在的平面平行。
所以这个问题就转化为分别证明两条直线与一个平面平行皆可。
下面是证明一条直线与一个平面平行的。
直线平行于平面,则直线的方向向量垂直于平面的法向量。
在空间直角坐标系中,平面的一般式为: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
所以两向量垂直,所以直线平行于平面
如果是一样的话
只要算出其中一个对应的点的距离,然后可以算出另外两个点的坐标
比如A三角形坐标(0,0,0),(0,1,1),(0,0,2)
如果B三角形的的一个坐标为(1,0,0)
那么另外两个点的坐标就为(1,1,1),(1,0,2)
1中,是平面间的旋转
4中,旋转后,两个三角形应该重复!
我记得旋转问题都是构造旋转矩阵来解决,不过用矩阵来旋转会造成万向锁的问题,最好用四元数来旋转。
当然要先通过数学计算知道计算过程是怎样的才好编程啊。程序中的算法都是在数学公式的基础上的。
想了一下,2维3维都一样的,编好号,然后某点不动,算一下其他两点的新位置。