当前位置: 首页 > 科技 > 人工智能 > anemone_光线反射_腾讯新闻

anemone_光线反射_腾讯新闻

天乐
2020-07-20 13:26:20 第一视角

今天咱们继续来看grasshopper循环插件anemone的一个官方案例,让直线在边界曲线内部不停反射的效果,核心运算器为IsoVist Ray,该运算器核心功能是求得直线作为射线和障碍物发生碰撞后的碰撞点,通过anemone,可以将碰撞点不停的递归下去,也就是上一次的碰撞点作为下一次的射线起始点,如此反复,达到射线在边界曲线内部不停反射的效果。

1.如果初始点在边界曲线外侧,通过后边的视线碰撞会得到起点在边界曲线上,方向向外的直线,如果以该直线继续求视线碰撞,就会报错,所以这里用一个流控制器,如果初始点在边界曲线外侧,则求其到边界曲线的最近点,起始点和最近点建立向量,以该向量的单位向量移动最近点,使得点在边界曲线内部,以该内部点作为循环的初始点。

2.以点和向量建立直线,利用IsoVist Ray视线射线运算器,得到直线到边界曲线的投射点,S端为输入直线,根据直线方向转换为射线,R端为采样半径,O端为障碍物,P端输出投射点,D端为距离,I端为状态,0表示有投射点,-1表示没有投射点,但是奇怪的是,不管是在边界上是否存在投射点,P端均会有输出点,而如果S端射线的起始点在边界曲线上,方向向外,则会报错。

3.根据投射点到边界曲线的最近点,得到t值,根据t值得到曲线上该处的垂直平面,将初始直线按照该平面进行镜像,得到镜像直线,并转换为反向向量,由于直线具有方向性,转换为向量的的方向与直线方向一致,为了让投射点下一次绘制的直线是指向边界曲线内部,这里需要获取其反向向量,投射点和向量作为下一次递归的初始点和向量,以此往复。

4.得到投射点,并将初始点插入到列表首位,然后连接成多段线,由于循环输出端选择的是Constant,也就是每循环一次,就会将循环结果输出,这样就可以得到生成多段线的动态效果,将多段线炸开,进行着色。

欢迎关注「颜犀设」知乎专栏和知识星球。

提示:支持键盘“← →”键翻页
为你推荐
加载更多
意见反馈
返回顶部