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
  • 相关阅读:
    VS 2008 和 .NET 3.5 Beta 2 发布了
    搭建.NET 3.0环境
    Expression Studio和Silverlight学习资源、安装问题汇总
    Discuz! NT官方社区
    VS2005中ajax安装指南[转]
    IT人 不要一辈子靠技术生存(转)
    Discuz!NT2.5发布 正式版同步开源
    VS2005下开发Silverlight 1.1翻译加补充
    自动化测试案例
    [原]JavaScript必备知识系列开篇
  • 原文地址:https://www.cnblogs.com/leejxyz/p/5250935.html
Copyright © 2011-2022 走看看