0
回答
M3G中的align()与setAlignment()猜想

     最近在学习M3G, 阅读align()与setAlignment()的规范说明时遇到点问题。我也在各大论坛上发帖询问,但迟迟没有人问津,于是我潜心苦读API文档, 充分发挥了我丰富的想象力,得出了一点小小的猜测。当然我得先与大家分享一下我的疑问:

   1. setAlignment(Node zRef, int zTarget,  Node yRef,  int yTarget) 共有四个参数, 我们可以把zRef与yRef设为不同的Node,同时zTarget与yTarget都不为NONE,然后我们传入align(reference)中的reference既不是zRef也不是yRef会发生什么情况?

  2.setAlignment()明明设定了两个轴对齐的相关信息(zRef与yRef不为同Node),为何我们传入align()中的却只有一个参数。

  3.setAlignment()为何只设定Z,Y两个轴对齐,X轴呢?

  

   

   我的猜想是:

  1.在此时应发生异常,我的依据是因为我们在setAignment()的时候清楚的设置了对齐的信息,Z轴与zRef相关,Y轴与yRef相关,如果传入align(reference)中的reference不是zRef与yRef中的一者,那么align对齐的时候,我们就无法知道我们的z轴与reference的什么轴对齐,相应的y轴对齐的信息也不知道。那么我们就无法给我们的Node找到对齐的信息,最终就无法与reference对齐。因此我的结论是reference必须是zRef与yRef中的一者。

  2.在1的结论上我又遇到了第二个问题。对于第二个问题我的猜想是,我们设定了两个Node与之相关,此时我们就能唯一却定本身Node的坐标系。关于如何计算, API规范说得很清楚(先是满足Z轴,然后才是Y,因此Y轴可能不精确)。如果我们的zRef与yRef坐标系不变动, 那么我们确定下来的坐标系也不会变动, 相反的,只要我们zRef与yRef一改变,那么我们确定下来的也会变化。我们Node对齐大部份的应用只需要跟踪一个Node,因此在设计API的时候只设计了一个参数。 如果你想跟踪两个Node,那么你可以调用align(null)。

  3.我们旋转变换时,三轴有先后关系的,先是Z轴,然后是Y轴, 最后是X轴,由于确定一坐标系我们只要知道其中两轴就可以确定第三轴 (第三轴的方向,要看你是用的左手坐标系还是右手坐标系),所以X轴就可以不需要了。我觉得,其实如果你自己实现一个自己的setAlignment(), 从三轴中任选两轴也未尝不可,只要你喜欢。

 

    哈哈,总算写完了! 以上只是我看API文档时的一些想法与猜测。 本人并没有用M3G写过一句代码, 所以如果错误敬请给与帮助。

 


原文链接:http://blog.csdn.net/favormm/article/details/4067514
<无标签>
举报
长平狐
发帖于6年前 0回/158阅
顶部