亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? quaternion.cpp

?? FreeWRLduneInputDevice和FreeWRL一起可以讓用戶用帶有6DoF的輸入設備檢索3D VRML/X3D數據。它基于FreeWRL的"/tmp/inpdev"擴展傳感器輸入接口和w
?? CPP
字號:
/* * Quaternion.cpp * * Copyright (C) 1999 Stephen F. White *  * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program (see the file "COPYING" for details); if  * not, write to the Free Software Foundation, Inc., 675 Mass Ave,  * Cambridge, MA 02139, USA. */#include <math.h>#include "stdafx.h"#include "Quaternion.h"Quaternion::Quaternion(const Vec3f &axis, float angle){    float	    s = (float) sin(angle * 0.5f);    x = axis.x * s;    y = axis.y * s;    z = axis.z * s;    w = (float) cos(angle * 0.5f);}/* from The Matrix and Quaternions FAQhttp://skal.planet-d.net/demo/matrixfaq.htm#Q48Feel free to distribute or copy this FAQ as you please.Q48. How do I convert a rotation matrix to a quaternion?--------------------------------------------------------        |  0  1  2  3 |        |             |        |  4  5  6  7 |    m = |             |        |  8  9 10 11 |        |             |        | 12 13 14 15 |  A rotation may be converted back to a quaternion through the use of  the following algorithm:  The process is performed in the following stages, which are as follows:    Calculate the trace of the matrix T from the equation:                2     2     2      T = 4 - 4x  - 4y  - 4z                 2    2    2        = 4( 1 -x  - y  - z )        = mat[0] + mat[5] + mat[10] + 1    If the trace of the matrix is greater than zero, then    perform an "instant" calculation.      S = 0.5 / sqrt(T)      W = 0.25 / S      X = ( mat[9] - mat[6] ) * S      Y = ( mat[2] - mat[8] ) * S      Z = ( mat[4] - mat[1] ) * S    If the trace of the matrix is less than or equal to zero    then identify which major diagonal element has the greatest    value.    Depending on this value, calculate the following:      Column 0:        S  = sqrt( 1.0 + mr[0] - mr[5] - mr[10] ) * 2;        Qx = 0.5 / S;        Qy = (mr[1] + mr[4] ) / S;        Qz = (mr[2] + mr[8] ) / S;        Qw = (mr[6] + mr[9] ) / S;      Column 1:        S  = sqrt( 1.0 + mr[5] - mr[0] - mr[10] ) * 2;        Qx = (mr[1] + mr[4] ) / S;        Qy = 0.5 / S;        Qz = (mr[6] + mr[9] ) / S;        Qw = (mr[2] + mr[8] ) / S;      Column 2:        S  = sqrt( 1.0 + mr[10] - mr[0] - mr[5] ) * 2;        Qx = (mr[2] + mr[8] ) / S;        Qy = (mr[6] + mr[9] ) / S;        Qz = 0.5 / S;        Qw = (mr[1] + mr[4] ) / S;     The quaternion is then defined as:       Q = | Qx Qy Qz Qw |*/Quaternion::Quaternion(const Matrix &matrix4){    const float* mat=&(*matrix4);    float trace=mat[0]+mat[5]+mat[10]+1;        if (trace>0)       {       float s = 0.5 / sqrt(trace);       x = ( mat[9] - mat[6] ) * s;       y = ( mat[2] - mat[8] ) * s;       z = ( mat[4] - mat[1] ) * s;       w = 0.25 / s;       }          else       {       int column_mindiag=0;       float mindiag=mat[0];       if (mat[5]<mindiag)          {          mindiag=mat[5];          column_mindiag=1;          }       if (mat[10]<mindiag)          {          mindiag=mat[10];          column_mindiag=2;          }       switch (column_mindiag)          {          float s;          case 0:             s  = sqrt( 1.0 + mat[0] - mat[5] - mat[10] ) * 2;                 x = 0.5 / s;             y = (mat[1] + mat[4] ) / s;             z = (mat[2] + mat[8] ) / s;             w = (mat[6] + mat[9] ) / s;             break;          case 1:             s  = sqrt( 1.0 + mat[5] - mat[0] - mat[10] ) * 2;             x = (mat[1] + mat[4] ) / s;             y = 0.5 / s;             z = (mat[6] + mat[9] ) / s;             w = (mat[2] + mat[8] ) / s;             break;          case 2:             s  = sqrt( 1.0 + mat[10] - mat[0] - mat[5] ) * 2;             x = (mat[2] + mat[8] ) / s;             y = (mat[6] + mat[9] ) / s;             z = 0.5 / s;             w = (mat[1] + mat[4] ) / s;             break;          }       }}QuaternionQuaternion::operator *(const Quaternion &q2) const{    const Quaternion   &q1 = *this;    Quaternion	    r;    r.x = q2.w * q1.x + q2.x * q1.w + q2.y * q1.z - q2.z * q1.y;    r.y = q2.w * q1.y + q2.y * q1.w + q2.z * q1.x - q2.x * q1.z;    r.z = q2.w * q1.z + q2.z * q1.w + q2.x * q1.y - q2.y * q1.x;    r.w = q2.w * q1.w - q2.x * q1.x - q2.y * q1.y - q2.z * q1.z;    return r;}Vec3fQuaternion::operator *(const Vec3f &v) const{    Quaternion	    r(conj() * Quaternion(v.x, v.y, v.z, 0.0f) * *this);    return Vec3f(r.x, r.y, r.z);}floatQuaternion::norm() const{    return (float) sqrt(x * x + y * y + z * z + w * w);}QuaternionQuaternion::conj() const{    return Quaternion(-x, -y, -z, w);}QuaternionQuaternion::operator *(float f) const{    return Quaternion(f * x, f * y, f * z, f * w);}voidQuaternion::normalize(){    float    rlen = norm();     if (rlen>0.000000005)         rlen=1/rlen;     else         rlen=1;    x *= rlen;    y *= rlen;    z *= rlen;    w *= rlen;}Vec3f operator *(const Vec3f &v,const Quaternion &q){     return q * v; }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美怡红院视频| 日韩精品免费视频人成| 中文字幕第一区第二区| 综合久久久久久久| 天天爽夜夜爽夜夜爽精品视频| 久久国产福利国产秒拍| 国产福利一区二区三区视频在线| 一本一道久久a久久精品| 日韩欧美在线1卡| 国产精品久久久久久户外露出 | 欧洲精品一区二区| 亚洲精品一区二区三区香蕉| 1000精品久久久久久久久| 秋霞午夜av一区二区三区 | 99久久精品久久久久久清纯| 久久色成人在线| 亚洲同性gay激情无套| 色婷婷综合久久久久中文一区二区 | 久久成人av少妇免费| 久久久99精品免费观看| 视频一区国产视频| 久久嫩草精品久久久久| 久久er99热精品一区二区| 国产日产欧美精品一区二区三区| 青青草精品视频| 欧美韩国日本一区| 欧美情侣在线播放| 亚洲国产wwwccc36天堂| 91在线码无精品| 日本午夜精品视频在线观看| 欧美美女一区二区在线观看| 亚洲精品你懂的| 91免费精品国自产拍在线不卡| 国产精品毛片久久久久久久| 成人黄色小视频在线观看| 亚洲精品在线观| 91福利精品视频| 三级在线观看一区二区 | 欧美一区二区三级| 亚洲老妇xxxxxx| 欧美成人欧美edvon| 久久国产精品99久久人人澡| 综合中文字幕亚洲| 久久亚洲一区二区三区明星换脸| 色播五月激情综合网| 国产一区二区免费视频| 日韩精品在线看片z| 国内欧美视频一区二区 | 99久久久久免费精品国产| 麻豆免费看一区二区三区| 日韩三级.com| 欧洲日韩一区二区三区| 不卡的av电影在线观看| 黄色小说综合网站| 青娱乐精品视频| 成人免费av在线| 亚洲欧洲日韩在线| 久久久综合视频| 26uuu亚洲| 日韩欧美国产精品一区| 欧美日韩一区二区三区四区| 日韩av中文字幕一区二区| 亚洲美女屁股眼交3| 欧美美女网站色| 色婷婷av一区| 91浏览器打开| eeuss鲁一区二区三区| 亚洲国产一区二区视频| 亚洲欧美激情小说另类| 亚洲欧洲美洲综合色网| 国产精品久久一卡二卡| 国产日韩成人精品| 日本一区二区成人在线| 国产情人综合久久777777| 久久久亚洲精华液精华液精华液| 精品卡一卡二卡三卡四在线| 精品久久五月天| 精品国产乱码久久久久久免费| 777亚洲妇女| 国产91综合网| 日日夜夜精品视频免费| 日韩精品午夜视频| 久久精品国产亚洲aⅴ| 免费观看日韩电影| 国产精品18久久久久久久久久久久| 综合分类小说区另类春色亚洲小说欧美| 亚洲高清视频中文字幕| 一区二区三区日韩| 久久免费的精品国产v∧| 9191精品国产综合久久久久久| 欧美高清精品3d| 日韩一区二区三区观看| 精品福利一区二区三区免费视频| 精品国产精品网麻豆系列 | 国产精品亲子乱子伦xxxx裸| 国产精品久久久99| 亚洲一区二区三区四区五区黄| 日韩无一区二区| 久久这里都是精品| 中文字幕高清不卡| 亚洲综合清纯丝袜自拍| 日本视频一区二区| 国产成人精品影视| 欧洲av在线精品| 精品国内二区三区| 中文字幕佐山爱一区二区免费| 亚洲aaa精品| 一区二区三区美女视频| 日本成人在线网站| 国产成人免费高清| 精品视频全国免费看| 精品国产乱码久久久久久久久| 日本中文字幕不卡| 丁香六月综合激情| 欧美在线你懂的| 欧美精品一区二区三区蜜桃视频| 国产精品久久久久久久蜜臀| 午夜视黄欧洲亚洲| 国产成人综合视频| 欧美麻豆精品久久久久久| 久久午夜羞羞影院免费观看| 亚洲欧美色一区| 激情综合一区二区三区| 久久精品噜噜噜成人88aⅴ| 国产成人鲁色资源国产91色综 | 欧美优质美女网站| 久久一夜天堂av一区二区三区| 亚洲区小说区图片区qvod| 极品美女销魂一区二区三区免费| 91免费精品国自产拍在线不卡| 精品91自产拍在线观看一区| 亚洲影视在线播放| 成人午夜视频免费看| 91精品欧美久久久久久动漫| 亚洲欧美综合网| 国产一区二区三区在线观看免费| 欧美性受xxxx黑人xyx性爽| 久久精品水蜜桃av综合天堂| 日韩成人精品在线| 欧美影片第一页| 亚洲天堂中文字幕| 国产成人午夜视频| 日韩精品一区国产麻豆| 亚洲不卡av一区二区三区| 99久久综合国产精品| 久久美女艺术照精彩视频福利播放 | 欧美一区二区性放荡片| 亚洲手机成人高清视频| 国产寡妇亲子伦一区二区| 日韩视频在线观看一区二区| 亚洲国产精品尤物yw在线观看| 91香蕉视频在线| 欧美激情一区二区三区蜜桃视频| 久久99最新地址| 日韩视频永久免费| 裸体歌舞表演一区二区| 欧美精品乱人伦久久久久久| 亚洲一区二区三区四区五区中文| 一本到不卡免费一区二区| 国产精品久久久久天堂| 成人app在线观看| 国产精品久久久久三级| 成a人片国产精品| 国产精品国产三级国产普通话三级| 国产最新精品免费| 亚洲一区二区三区四区五区中文| 欧美在线看片a免费观看| 一区二区三区四区中文字幕| 色天天综合色天天久久| 亚洲美女一区二区三区| 在线免费观看一区| 亚洲国产毛片aaaaa无费看| 欧美日韩小视频| 日韩黄色免费网站| 日韩欧美另类在线| 国产一区二区导航在线播放| 国产亚洲va综合人人澡精品| 高清不卡一二三区| 亚洲欧美在线视频观看| 91黄视频在线| 日韩极品在线观看| xfplay精品久久| 不卡在线观看av| 亚洲午夜一区二区三区| 欧美日韩国产首页| 狠狠色丁香久久婷婷综合_中| 久久这里只精品最新地址| www.欧美色图| 亚洲黄色性网站| 91精品国产综合久久精品图片| 毛片av一区二区三区| 欧美高清在线一区二区| 日本高清无吗v一区| 日韩va亚洲va欧美va久久| 国产欧美视频一区二区| 色8久久人人97超碰香蕉987| 日本不卡视频在线观看| 国产欧美1区2区3区| 欧美在线短视频| 国产专区欧美精品|