react 前端框架如何驱动企业数字化转型与创新发展
805
2022-11-14
程序化生成三角形
分析世界坐标,找出世界坐标的X轴的Y轴及其正负方向;获取世界坐标系下的单位长度大小,以供后续绘制三角形使用;利用世界坐标系下的单位长度大小,定义三角形的三个顶点,若需要将斜边放置在轴上,则采用勾股定理求出斜边长度并对其顶点坐标进行设定即可;使用相关API绘制三个顶点所定义的三角形;添加三角形三个顶点在三角形自身局部坐标系下的缩放系数,并将其定义为公共参数;添加三角形三个顶点在三角形自身局部坐标系下的偏移系数,并将其定义为公共参数;(也可根据世界坐标系下三角形生成的位置对其加以移动,缩放亦然);使用偏移参数将生成的三角形放置在父物体的特定部位,比如:边缘处;针对局部坐标系下三角形的自转,可直接设置其旋转角度;然而,为使三角形能够跟着其父物体一同旋转的同时还绕着父物体公转,每次旋转时对三角形的位置进行重新设定,使用如下数学公式修正三角形的位置[theta为旋转角度,注意使用弧度制]:
RelativeLocation.x = (originalPosX - parentPosX) * math.cos(math.rad(theta)) - (originalPosY - parentPosY) * math.sin(math.rad(theta)) + parentPosX RelativeLocation.y = (originalPosX - parentPosX) * math.sin(math.rad(theta)) + (originalPosY - parentPosY) * math.cos(math.rad(theta)) + parentPosY --RelativeLocation.z = SOME_VALUE
生成多个三角形,可以选择直接在一边生成的方式,此时可以构建等差数列an=a1+(n-1)*d,其中,a1为初始的偏移参数,d为每个三角形之间的间距,an将作为累加的偏移项作用于每个生成的三角形上:
local sizeFactor = 1 --缩放倍率 local p1 = {x = -sizeFactor*(math.sqrt(2))*ONE, y = 0, z = 0} local p2 = {x = 0, y = 0, z = 0} local p3 = {x = -sizeFactor*(math.sqrt(2)/2)*ONE, y = sizeFactor*(math.sqrt(2)/2)*ONE, z = 0} local a1, d = 0, (math.sqrt(2)*ONE+interval) --构建等差数列: an = a1 + (n-1)*d for i = 1, count do local an = (i-1)*d local A = {x = p1.x - an, y = p1.y, z = 0} local B = {x = p2.x - an, y = p2.y, z = 0} local C = {x = p3.x - an, y = p3.y, z = 0} DrawTriangle(A, B, C) end
生成多个三角形也可以选择在两边生成的方式:
local sizeFactor = 1 --缩放倍率 local p1 = {x = -sizeFactor*(math.sqrt(2)/2)*ONE, y = 0, z = 0} local p2 = {x = sizeFactor*(math.sqrt(2)/2)*ONE, y = 0, z = 0} local p3 = {x = 0, y = sizeFactor*(math.sqrt(2)/2)*ONE, z = 0} local a1, d = 0, (math.sqrt(2)*ONE+interval) --构建等差数列: an = a1 + (n-1)*d local CreateTriangleOnSide = function(side) for i = 1, math.floor(count/2) do local an = i*d*side local A = {x = p1.x - an, y = p1.y, z = 0} local B = {x = p2.x - an, y = p2.y, z = 0} local C = {x = p3.x - an, y = p3.y, z = 0} DrawTriangle(A, B, C) end end --中间生成一个,然后两边分别生成-- local SIDE = {LEFT = -1, RIGHT = 1} --生成左右两边专用枚举 DrawTriangle(p1, p2, p3) CreateTriangleOnSide(SIDE.LEFT) CreateTriangleOnSide(SIDE.RIGHT)
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~