计算两个向量的夹角(分逆时针与顺时针)

问题:

两个向量,求解一个向量旋转到另一个向量的角度,逆时针为正,顺时针为负。【两向量的夹角,角度带正负号】

def CalAngle(v1, v2):
    # v1旋转到v2,逆时针为正,顺时针为负
    # 2个向量模的乘积
    TheNorm = np.linalg.norm(v1) * np.linalg.norm(v2)
    # 叉乘
    rho = np.rad2deg(np.arcsin(np.cross(v1, v2) / TheNorm))
    # 点乘
    theta = np.rad2deg(np.arccos(np.dot(v1, v2) / TheNorm))
    if rho < 0:
        return - theta
    else:
        return theta

原理:

使用了向量的外积来判断正负

要让矩形图形项根据向量夹角和方向来旋转,可以使用QTransform类的rotate()函数。该函数可以将图形项绕一个点旋转一定的角度。在这个场景,可以将矩形图形项的旋转点设置为矩形的心点,然后根据向量夹角和方向来计算旋转的角度,最后再使用rotate()函数进行旋转。 具体的实现步骤如下: 1.获取向量夹角和方向。可以使用qAtan2()函数计算向量夹角,然后根据向量的方向来判断旋转的方向(顺时针逆时针)。 2.计算旋转的角度。根据向量夹角和方向来计算旋转的角度,可以使用qRadiansToDegrees()函数将弧度转换为角度。 3.设置旋转点。将矩形图形项的旋转点设置为矩形的心点,可以使用setTransformOriginPoint()函数来设置旋转点。 4.旋转矩形。最后使用QTransform类的rotate()函数来旋转矩形图形项。 示例代码如下: ```cpp // 获取向量夹角和方向 double angle = qAtan2(vector.y(), vector.x()); Qt::RotationDirection direction = (angle >= 0) ? Qt::ClockwiseRotation : Qt::CounterClockwiseRotation; // 计算旋转的角度 double degree = qRadiansToDegrees(angle); // 设置旋转点 rectangleItem->setTransformOriginPoint(rectangleItem->boundingRect().center()); // 旋转矩形 QTransform transform; transform.rotate(degree, direction); rectangleItem->setTransform(transform); ``` 其,`vector`是一个QVector2D类型的向量,`rectangleItem`是一个QGraphicsRectItem类型的矩形图形项。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值