zoukankan      html  css  js  c++  java
  • 空间任意点沿着任意一条直线旋转的实现

    给定任意一点p(x,y,z),直线AB,其中A(a0,b0,c0)、B(a,b,c),旋转的角度θ=theta,可对其进行如下实现:

     1 private double[] random_rotateObject(double x, double y, double z, double a, double b, double c,double a0,double b0,double c0,double theta)
     2         {
     3             //(a0,b0,c0)轴线的始点
     4             //(a,b,c)轴线L末点
     5             //(x,y,z)初始点位置
     6             //数组xyz 绕L旋转后的位置
     7             //行(1,0,0,-m)(0,1,0,-n)(0,0,1,-k)(0,0,0,1)移至原点
     8             double u = Math.Sqrt(3)/3; ;
     9             double v = Math.Sqrt(3)/3;
    10             double w = Math.Sqrt(3)/3;       //方向向量(u,v,w)需为单位向量!!!
    11             double PI = 3.1415926535898
    12             double[] xyz=new double[3];
    13             double SinA = Math.Sin(theta * PI / 180);
    14             double CosA = Math.Cos(theta * PI / 180); 
    15 
    16             double uu=u*u;
    17             double vv=v*v;
    18             double ww=w*w;
    19             double uv=u*v;
    20             double uw=u*w;
    21             double vw=v*w;
    22 
    23             float t00 = uu + (vv + ww) * CosA;
    24             float t10 = uv * (1 - CosA) + w * SinA;
    25             float t20 = uw * (1 - CosA) - v * SinA;
    26             float t30 = 0;
    27 
    28             float t01 = uv * (1 - CosA) - w * SinA;
    29             float t11 = vv + (uu + ww) * CosA;
    30             float t21 = vw * (1 - CosA) + u * SinA;
    31             float t31 = 0;
    32 
    33             float t02 = uw * (1 - CosA) + v * SinA;
    34             float t21 = vw * (1 - CosA) - u * SinA;
    35             float t22 = ww + (uu + vv) * CosA;
    36             float t32 = 0;
    37 
    38             float t03 = (a0 * (vv + ww) - u * (b0 * v + c0 * w)) * (1 - CosA) + (b0 * w - c0 * v) * SinA;
    39             float t13 = (b0 * (uu + ww) - v * (a0 * u + c0 * w)) * (1 - CosA) + (c0 * u - a0 * w) * SinA;
    40             float t23 = (c0 * (uu + vv) - w * (a0 * u + b0 * v)) * (1 - CosA) + (a0 * v - b0 * u) * SinA;
    41             float t33 = 1;
    42        
    43             xyz[0] = t00 * x + t01 * y + t02 * z + t03;
    44             xyz[1] = t10 * x + t11 * y + t12 * z + t13;
    45             xyz[2] = t20 * x + t21 * y + t22 * z + t23;
    46             return xyz;
    47         }
    View Code
  • 相关阅读:
    Struts2:<s:action>的使用
    Struts2:Struts2在jsp中使用标签时值的获取
    jsp:useBean的使用
    关于Filter的一点误解
    Strust2: 工作流程
    java程序连接MySQL数据库
    python 开发工具简介
    NCEP CFSR数据下载
    美国NOAA/AVHRR遥感数据
    气象网站
  • 原文地址:https://www.cnblogs.com/leejxyz/p/5250935.html
Copyright © 2011-2022 走看看