江苏快三开奖结果

腳踏實地

XIN WUZAO

2019年12月8日 #

rayIntersect 重新修改


----------------------------------
一段光線求交的場景!
----------------------------------


posted @ 2019-12-08 00:59 LSH 閱讀(247) | 評論 (0)編輯 收藏

2019年12月7日 #

350行路徑追蹤渲染器online demo

這是一個簡單的路徑追蹤demo
移動視角:左鍵按下+鼠標移動
全屏查看:右鍵按下


posted @ 2019-12-07 15:21 LSH 閱讀(154) | 評論 (0)編輯 收藏

2019年11月3日 #

關于向量的叉乘操作

在三維中常常需要重算正交的基向量組,
由于叉乘操作是有序的. 一般來說 : UxV不等于VxU, 
所有往往記不住到底是哪個左向量乘哪個右向量求出
第三個向量,由于吃了一些虧所以做了總結.
i,j,k三個基向量, 如果你使用的圖形引擎Z往屏幕外面,
右手邊X和上方向Y規定為正方向的一組正交向量,如果
你使用的模型的基向量組和它相同,那么放心用.
ixj=k, kxi=j, jxk=i 
但是你可能不總是那么幸運.也許你打算使用Z往屏幕里面,
右手邊X和上方向Y規定為正方向的一組正交向量,這時你就
需要改變叉乘方式了
jxi=k, ixk=j, kxj=i 
也就是統統反過來使用就可以了.
但是如果你想使用Z往屏幕里面,右手邊X和下方向Y規定
為正方向的一組正交向量時這時你又需要怎么弄呢?
其實還是:
ixj=k, kxi=j, jxk=i 
如果你想使用Z往屏幕里面,左手邊X和下方向Y規定
為正方向的一組正交向量時這時你又需要怎么弄呢?
這時又是:
jxi=k, ixk=j, kxj=i 
也是統統反過來使用.
這時怎么得到得結論?
其實就是通過計算得到的
以下都假設x右為正方向,y上為正方向,z往屏幕外為正方向設備的環境
測試.

var vec3 = glMatrix.vec3;
console.log("-------------------->z軸往屏幕里為正的坐標系");
var u = vec3.fromValues(1,0,0)
var v = vec3.fromValues(0,1,0)
var w = vec3.fromValues(0,0,-1)

console.log(vec3.cross(vec3.create(), w,v));
console.log(vec3.cross(vec3.create(), u,w));
console.log(vec3.cross(vec3.create(), v,u));
console.log("-------------------->y軸向下為正的坐標系");
var u = vec3.fromValues(1,0,0)
var v = vec3.fromValues(0,-1,0)
var w = vec3.fromValues(0,0,1)

console.log(vec3.cross(vec3.create(), w,v));
console.log(vec3.cross(vec3.create(), u,w));
console.log(vec3.cross(vec3.create(), v,u));
console.log("-------------------->x軸向左為正的坐標系");
var u = vec3.fromValues(-1,0,0)
var v = vec3.fromValues(0,1,0)
var w = vec3.fromValues(0,0,1)

console.log(vec3.cross(vec3.create(), w,v));
console.log(vec3.cross(vec3.create(), u,w));
console.log(vec3.cross(vec3.create(), v,u));
console.log("-------------------->全部反為正坐標系");
var u = vec3.fromValues(-1,0,0)
var v = vec3.fromValues(0,-1,0)
var w = vec3.fromValues(0,0,-1)
console.log(vec3.cross(vec3.create(), w,v));
console.log(vec3.cross(vec3.create(), u,w));
console.log(vec3.cross(vec3.create(), v,u));

以上都能得到正確的向量組

console.log("-------------------->z軸往屏幕外為正坐標系");
var u = vec3.fromValues(1,0,0)
var v = vec3.fromValues(0,1,0)
var w = vec3.fromValues(0,0,1)
console.log(vec3.cross(vec3.create(), v,w));
console.log(vec3.cross(vec3.create(), w,u));
console.log(vec3.cross(vec3.create(), u,v));
console.log("-------------------->任意兩個是為負數的坐標系");
var u = vec3.fromValues(-1,0,0)
var v = vec3.fromValues(0,1,0)
var w = vec3.fromValues(0,0,-1)
console.log(vec3.cross(vec3.create(), v,w));
console.log(vec3.cross(vec3.create(), w,u));
console.log(vec3.cross(vec3.create(), u,v));

以上也都能得到正確的向量組.
結論就是如果偶數相反就正常使用,如果是奇數相反就
用反過來用.

posted @ 2019-11-03 23:34 LSH 閱讀(21) | 評論 (0)編輯 收藏

2019年6月26日 #

排列組合

// 排列:正數n的全排列
// n 正數n
// return 數值
function A(n) {
if (n <= 0) return n;
var sum = 1;
for (var i = n; i > 0; --i) {
sum *= i;
}
return sum;
}

// 組合:從n個中選擇m個來組合
// n 正數n
// m 正數m
// return 數值
function C(n, m) {
return A(n) / (A(m) * A(n - m));
}

// 數組組合: 從array中選擇n個元素來組合
// array 數組
// n 正數n
// return 多少種組合
function ArrayComb(array, n) {
var result = [], t = [], e;

function Recursion(index, array, n, t, result) {
if (t.length === n) { result.push(t.slice()); return };

for (var i = index; i < array.length; ++i) {
e = array[i];
t.push(e);
Recursion(i + 1, array, n, t, result);
t.pop();
}
}

Recursion(0, array, n, t, result);
return result;
}

posted @ 2019-06-26 12:57 LSH 閱讀(40) | 評論 (0)編輯 收藏

2018年3月23日 #

rayIntersect

     摘要: ---------------------------------- 一段光線求交的場景! ---------------------------------- 點我看源碼 Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --...  閱讀全文

posted @ 2018-03-23 00:27 LSH 閱讀(89) | 評論 (0)編輯 收藏

2017年1月19日 #

矩陣計算器

     摘要: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--><html><head><title>矩陣計算器 (1.0)</title><meta charset="utf-8">&l...  閱讀全文

posted @ 2017-01-19 23:36 LSH 閱讀(139) | 評論 (0)編輯 收藏

2016年12月16日 #

Quine program

c/c++
//>this is a Quine program implement by c language.
//>reference http://www.madore.org/~david/computers/quine.html
#include <stdio.h>
int main(void){
  char n='\n'; char g='\\'; char q='"'; char s=';';
  char*s1="//>this is a Quine program implement by c language.%c//>reference http://www.madore.org/~david/computers/quine.html%c#include <stdio.h>%cint main(void){%c  char n='%cn'; char g='%c%c'; char q='%c'; char s=';';%c  char*s1=%c%s%c;%c  printf(s1,n,n,n,n,g,g,g,q,n,q,s1,q,n,s,n,s,n)%c%c  return 0%c%c}";
  printf(s1,n,n,n,n,g,g,g,q,n,q,s1,q,n,s,n,s,n);
  return 0;
}
javascript
var c1='"'; var c2='\n'; var c3='\\'; var c4=';';
var s1="var c1='%c1'; var c2='%c3n'; var c3='%c3%c3'; var c4=';';%c2var s1=%c1%s1%c1%c4%c2console.log((((((((((s1.replace('%c1', c1)).replace('%c1', c1)).replace('%c1', c1)).replace('%c2', c2)).replace('%c2', c2)).replace('%c3', c3)).replace('%c3', c3)).replace('%c3', c3)).replace('%c4', c4)).replace('%s1', s1))";
console.log((((((((((s1.replace('%c1', c1)).replace('%c1', c1)).replace('%c1', c1)).replace('%c2', c2)).replace('%c2', c2)).replace('%c3', c3)).replace('%c3', c3)).replace('%c3', c3)).replace('%c4', c4)).replace('%s1', s1))

posted @ 2016-12-16 16:44 LSH 閱讀(161) | 評論 (0)編輯 收藏

2016年10月2日 #

js模塊編程

<script type="text/javascript">
 
        void function(global)
        {
            var mapping = {}, cache = {};
            global.define = function(id, func){
                mapping[id] = func;
            };
            
            global.require = function(id){
                if(cache[id])
                    return cache[id];
                else
                    return cache[id] = mapping[id]({});
            };
        }(this);
        
        define("moduleA", function(exports)
        {
            function ClassA(){
            }
            
            ClassA.prototype.print = function(){
                alert("moduleA.ClassA")
            }
            
            exports.New = function(){
                return new ClassA();
            }
        
            return exports;
            
        });
        
        define("moduleB", function(exports)
        {
            function ClassB(){
            }
        
            ClassB.prototype.print = function(){
                alert("moduleB.ClassB")
            }
            
            exports.New = function(){
                return new ClassB();
            }
            
            return exports;
        });
        
        define("moduleC", function(exports)
        {
            function ClassC(){
            }
        
            ClassC.prototype.print = function(){
                var classA = require("moduleA").New();
                classA.print();
                    
                var classB = require("moduleB").New();
                classB.print();
                    
                alert("moduleC.ClassC")
            }
            
            exports.New = function(){
                return new ClassC();
            }
            
            return exports;
        });
        
        var classC = require("moduleC").New();
        classC.print();
        
      </script>

posted @ 2016-10-02 20:33 LSH 閱讀(64) | 評論 (0)編輯 收藏

2016年9月19日 #

trace.bat

@echo off
:Main
setlocal EnableDelayedExpansion
call :ShowInputIP
call :CheckIP
if %errorlevel% == 1 (
    call :TrackIP !IP! 1
)
setlocal DisableDelayedExpansion
goto :Main
::---------------------------------------------------------------
:TrackIP
ping %1 -n 2 -i %2 >rs.txt
set /a c=%2+1
if %c% geq 65 (
    echo 超出TTL限制[65]
    ping %1 -n 1
    goto :eof
)
for /f "tokens=1-5* delims= " %%i in (rs.txt) do (
    if "%%i" == "來自" (
        echo    追蹤到IP[%%j] TTL=%2
        if %%j == !IP! (
            echo 追蹤完成!!! 
        ) else (
            call :TrackIP %1 %c%
        )
        goto :eof
    ) else (
        if "%%i" == "請求超時。" ( 
            echo 跳躍TTL  [TTL=%2%] 
            call :TrackIP %1 %c% 
            goto :eof
        )
    )
)
goto :eof
::---------------------------------------------------------------
:ShowInputIP
echo 請輸入要跟蹤 ip/域名 地址:
set /p IP=
goto :eof
::---------------------------------------------------------------
:CheckIP
ping %IP% -n 1 >temp.txt
set context=
for /f "tokens=1-5* delims= " %%i in (temp.txt) do (
    if "%%m" == "具有" (
        set context=%%l
        set IP=!context:~1,-1!
        echo 解析域名 [%IP%] → IP [!IP!]
        goto :CheckEnd
    )
)
:CheckEnd
del temp.txt
exit /b 1

posted @ 2016-09-19 03:07 LSH 閱讀(69) | 評論 (0)編輯 收藏

2016年9月4日 #

shader 中避免if else

// test less and equal zero
// x小于,等于0返回0,x大于0返回1
// if x <= 0 return 0 and x > 0 return 1.
float LQZ(x){
   return max(0, sign(x));
   // return ceil(clamp(0.,1.,x));
}

// if x <= 0 return a and x > 0 return b
// x小于,等于0返回a,x大于0返回b
float v = mix(a, b, LQZ(x));  

// if x is odd number (0~1,2~3,4~5,6~7) return a else return b
// 奇數段(0~1,2~3,4~5,...)返回a,偶數段(1~2,3~4)返回b
float v = mix(a, b, LQZ(mod(x,2.0) - 1.0));

posted @ 2016-09-04 14:32 LSH| 編輯 收藏