【原创】《矩阵的史诗级玩法》连载十二:任意角度旋转+斜切扭曲的铺贴实现

这个标题拿出来估计不会引起太多的重视,我确实也不知道用什么词汇来表达能达到更好的效果,那直接把上一篇最后的两个图给出来吧!

大家可以看一下这些铺贴,如果给足条件了,比如两个轴的角度,你们可以推导出它的铺贴算式么?

如果可以的话,那跳过这篇也是无可厚非,但是先说明一下,接下来要压轴登场的史诗级玩法将建立在本篇的基础上,所以先了解下也没啥坏处。至少先看下给出的条件长啥样子。

这种坐标变换,很多地方(包括我现在涉猎的瓷砖领域)都不会用角度表示旋转。原因很简单,角度需要做三角函数计算,用起来耗性能也不方便,因此他们提出一个叫“基向量”的东西。

正式开始前,我要感谢三维家一位牛逼的同事,他虽然不搞算法,但却通过自己看书把基向量这套体系给研究出来了。至于我,遇到这种问题的话,多半会思维定势,想着如何通过拼接旋转和缩放矩阵让两个轴刚好达到给定的方向。这当中必然涉及很多三角函数的变换,运算过程会变得非常繁琐,也非常蛋疼。因此在这位同事面前,我是真的自愧不如啊。

现在我们来了解下这套基向量的体系。

所谓基向量,就是指斜坐标轴1个单位长度(1格)在直角坐标系下所对应的向量值。哎呀,文字表达能力欠缺,还是上图吧。

 

这张图中,红线代表斜坐标系在x方向上的基向量(0.87,0.50),绿线则代表斜坐标系在y方向上的基向量(-0.32,0.95)。

也就是说,在两个坐标系中,斜坐标系中的(1,0)等于等于直角坐标系中的(0.87,0.50),斜坐标系中的(0,1)等于直角坐标系中的(-0.32,0.95)。

有了这两个关系,我们就可以尝试在斜坐标系上取任意一点,求出它在直角坐标系下的值。

先拿个简单的吧,比如斜坐标系下的(1,1)

我们看到,基向量的两个端点,跟坐标原点,以及黑点(1,1)刚好构成了一个平行四边形,然后向量又刚好满足平行四边形法则,这样的话,从坐标原点到黑点(1,1)的向量就更好等于两个基向量的和。即斜坐标下的(1,1)等于直角坐标下的(0.87,0.50)+(-0.32,0.95)=(0.55,1.45),这个有看不懂的话可以自行百度向量的四则运算。

有了这个基础,我们就可以尝试取别的点了,比如(3,2)。

然后我们把基向量沿着斜坐标轴延长到黑点所在的位置,也就是红向量延长到原来的3倍,绿向量延长到原来的2倍,接着我们也把坐标原点到黑点的向量连起来。可以发现,4个点(坐标原点,两个基向量的端点和黑点)也是构成了一个平行四边形。

这样,很明显,斜坐标系下的(3,2)等于直角坐标系下的(0.87,0.50)*3+(-0.32,0.95)*2=(0.87*3-0.32*2, 0.50*3+0.95*2)

把(3,2)换成任意的其它点,这个规律仍然成立,因此我们有如下公式

(x,y)=(0.87*x'-0.32*y', 0.50*x'+0.95*y')

其中,x,y代表直角坐标系下的坐标值,而x',y'则为斜坐标系下的坐标值。

然后我们也把基向量换掉。用ex表示x方向的基向量,ey表示y方向的基向量,则有

(x,y)=(ex.x*x'+ex.y*y', ey.x*x'+ey.y*y')

哎呀,CSDN改版了,不知道怎么用下标,那我还是用MathType弄个数学公式吧。

三维家有个同事给我的文章提了个建议,说重点部分应该加个高亮颜色,这次很不幸运地,重点在一个用图片来显示的公式上,那我就直接给图片上的字改了个颜色再截图。这样问题不大吧?

把这里的等量关系拆分下,就有

ex.x*x'+ex.y*y'=x

ey.x*x'+ey.y*y'=y

其中,ex.x,ex.y,ey.x,ey.y均为常量,所以虽然看着有点眼疼,但是如果我们分别用A,B,C,D表示这4个变量的话:

A=ex.x

B=ex.y

C=ey.x

D=ex.y

那看起来就舒服多了:

Ax'+By'=x

Cx'+Dy'=y

这个坐标转换的关系式还是比较简单的。然后下一个问题就是如果是要从x,y反推回x',y',那要怎么做呢?最直接的方法是解二元一次方程组,但我们求逆矩阵的时候已经做了一次这样的事情,那我们也试着用矩阵来计算吧!

现在我们把前面提到的——矩阵跟点相乘的公式拿过来。

由于操作的点是x',y'而非x,y,所以我们先改改字母,这样看着不至于混淆。

然后我们把上面等式的左侧跟矩阵乘法的结果相对应,就得到如下结果

于是有a=A=ex.x,b=C=ey.x,c=B=ex.y,d=D=ey.y,tx=0,ty=0,于是我们得到最终的基向量变换矩阵为:

写长了,但是篇幅基本上都是被截图挤长的,内容不算多,再给代码么?还是放到下一篇好了,代码也是个很挤篇幅的玩意儿,留到下一篇会更合适,嘿嘿!那这篇就先到这里喽~~未完待续。

 

 

猜你喜欢

转载自blog.csdn.net/iloveas2014/article/details/82946544
今日推荐