zoukankan      html  css  js  c++  java
  • 绕任意轴旋转

    绕任意轴旋转

    1. 向量F为旋转轴
    2. 向量AC'为旋转后的向量
    3. 向量AC为旋转前的向量
    
    1. 求出向量AB
    向量AB = (向量AC dot 向量AF) x 向量AF
    
    2. 求出向量BC'
    向量BC' = 向量BZ'sin theta +  向量BC cos theta
    
    向量BZ' = 向量AF x 向量BC = 向量AF x 向量AC
    
    向量BC = 向量AC - 向量AB
    
    3. 求出向量AC'
    
    向量AC' = 向量AB + 向量BC'
    
    
    4. 将各项结果代入
    
    向量AC' = (向量AC dot 向量AF) x 向量AF + (向量AF x 向量AC)sin theta + (向量AC - (向量AC dot 向量AF) x 向量AF)cos theta
    
    5. 假设旋转轴向量表示为
    向量AF = (Rx,Ry,Rz)
    
    
    

    最终结果

    其中(Rx,Ry,Rz)代表任意旋转轴:

    function axisRotation(axis, angle, target){
        var x = axis.x;
        var y = axis.y;
        var z = axis.z;
        var l = Math.sqrt(x * x + y * y + z * z);
        x = x / l;
        y = y/ l;
        z = z /l;
        var xx = x * x;
        var yy = y * y;
        var zz = z * z;
        var cos = Math.cos(angle);
        var sin = Math.sin(angle);
        var oneMCos = 1 - cos;
        
        target = target || new Float32Array(16);
        
        target[0] = xx + (1 - xx) * cos;
        target[1] = x * y * oneMCos + z * sin;
        target[2] = x * z * oneMcos - y * sin;
        target[3] = 0;
        
        target[4] = x * y * oneMCos - z * sin;
        target[5] = yy + (1 - yy) * cos;
        target[6] = y * z * oneMCos + x * sin;
        target[7] = 0;
        
        target[8] = x * z  * oneMCos + y * sin;
        target[9] = y * z * oneMCos - x * sin;
        target[10] = zz + (1 - zz) * cos;
        target[11] = 0;
        
        target[12] = 0;
        target[13] = 0;
        target[14] = 0;
        target[15] = 1;
        
        return target;
    }   
    
  • 相关阅读:
    SQL 基础命令和函数
    [Delphi] FMXUI
    Win10 磁盘占用 100% 有效解决办法
    [转] Windows下编译OpenSSL
    [Java] Spring + SpringMVC + Maven + JUnit 搭建
    [Java] ApplicationContext 辅助类
    [Java] Maven 镜像仓库
    [Java] Spring MVC 知识点
    [Java] Maven 建立 Spring MVC 工程
    [Java] Maven 安装和配置
  • 原文地址:https://www.cnblogs.com/pluslius/p/13964880.html
Copyright © 2011-2022 走看看