固定一个点A,让点B (结构式) 围绕点A旋转,使A, B, C在同一直线上Python实现

这篇博客主要分享了如何用Python实现几何学中的一个操作:固定点A,让点B围绕点A旋转,使得A, B, C三点在同一直线上。作者提到这个过程的实现耗费了一两个月的时间,代码包括结构式的平移、旋转和转向一个点的功能。" 127621994,9280840,物理:配速法解决复合场问题,"['物理', '电磁学', '动力学', '运动轨迹', '能量守恒']
摘要由CSDN通过智能技术生成

直接上代码

import numpy as np

#结构式旋转的函数。只需要四个参数即可。这几个参数的意义:
    #p1: 固定不动的那个点。p1不要求是坐标原点,可以是任意坐标。
    #p2: 要移动的那个点。
    #p3: 移动的目标点。这个点与p2移动之后的点不一定是重合的,但p1, p2'(p2移动后的点), p3一定是在同一直线上的
    #listPoint: 要旋转的结构式
    #具体原理:根据p1, p2, p3,计算出旋转矩阵。有了旋转矩阵之后,旋转公式与每一个点都点乘,即可得到旋转之后的坐标,
    #对于整个结构式而言,得到的是旋转之后的结构式,且每个点的相对位置保持不变,且移动到所希望的位置。
    @staticmethod
    def structureRoate_fixOnePoint(p1, p2, p3, listPoint):
        #计算旋转矩阵
        rotationMatrix = Move_and_Rotation.calculationRoationMatrixByThreePoints(p1, p2, p3)

        listPoint2 = []
        for point in listPoint:
            #起始位置。注意,- p1.x,         - p1.y和- p1.z的目的是让p1点变成坐标原点,计算完之后再加上这些数据即可。
            #如果p1不是坐标原点,计算结果是错误的
            resourceMatrix = np.array([point.x - p1.x, point.y - p1.y, point.z - p1.z]).T
            
            #利用旋转矩阵对原始坐标进行旋转
            targetMatrix = np.dot(rotationMatrix, resourceMatrix)
            
            #point旋转之后得到point2,其坐标如下。记得要加上p1的坐标
            point2 = Point(targetMatrix[0] + p1.x, targetMatrix[1] + p1.y, targetMatrix[2] + p1.z)
            listPoint2.append(point2)
            
        return listPoint2
        
    #矩阵的叉乘。这里其实是向量的叉乘
    @staticmethod
    def crossProduct(a, b):
        c = []
        c.append(a[1] * b[2] 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值