美文网首页
矩形在平面直角坐标系中的平移与旋转

矩形在平面直角坐标系中的平移与旋转

作者: 王老菊花茶 | 来源:发表于2017-10-21 00:13 被阅读0次

    说明

    存在空间(世界)坐标系和矩形(物体)坐标系
    坐标系:纵轴y向下递增,横轴x向右递增
    矩形坐标系中,纵轴称为重力线(Gravity line),横轴称为大地线(Ground)
    本部分涉及矩形中两个很重要的点,一个是几何重心G,另一个定位点A(任意一个顶点)
    重心决定平移,定位点决定旋转

    思路

    先计算位移(平移变化),再计算转角(旋转变化)。平移部分暂且不谈,这个实现起来不是什么难事。重要的是转角

    矩形的旋转
    如图,A到y轴距离为w,A到x轴距离为h
    则w = abs(A.x - G.x),h = abs(A.y - G.y) //考虑到A的位置不同,所以做绝对值运算
    deg = arctan(h/w) // 用反正切求出初始角α
    这里我们只考虑顺时针旋转,先判断A的位置,分九种情况,在一,二,三,四象限,在x正,负半轴,在y正,负半轴,在原点。
    若A与原点重合则不存在矩形,由于正切函数的特性,这里只分四种情况:
    第一象限+x正半轴:算出w和h的比值,带入一个方程就能求出长宽,这里讲下圆的直线系方程xx+yy=rr(当然这不是标准形式),其实就是著名的勾股定理,好好想想就能明白了,r确定了圆的大小,然后因为平方,解出来有两个点......
    那么我想你明白我的意思,A.x = G.x + w, A.y = G.y + h(不同象限里,这里的加减是不同的)然后,当deg = 90 时,将A放在下一个情况下讨论(第二象限+y正半轴),因为tan90,不存在嘛,这时deg = 0。以下同理,四次转一圈为一个周期,具体deg每次加多少根据转速来定,这里先不考虑。
    当确定了A后,便可以确定其它三个顶点坐标:
    a = abs(A.x - G.x), b = abs(A.y - G.y)
    如B点,B.x = G.x + a, B.y + b ......
    值得注意的是:最好给四个顶点规定一个顺序,确定了定位点的象限后,以便于确定另三个顶点的位置。
    最后将四点相连便得到了我们要的矩形,例如Javascript中用Canvas
    context.moveTo(x1,y1) //起点位置
    context.lineTo(x2,y2) //终点位置
    context.stroke() //连接两点

    最后

    至此,最核心的部分就写完了。其实这是我做刚体模拟的一部分,可能会有更好的实现,但这只是我的个人思路。另外你还可以读一下我的《矩形相交判定》,这些大概花了我一个星期,基本都是晚自习研究的。本篇不提供任何程序上的完整实现,只讲思路,如有错误,欢迎指出!

    相关文章

      网友评论

          本文标题:矩形在平面直角坐标系中的平移与旋转

          本文链接:https://www.haomeiwen.com/subject/ejybuxtx.html