/*************************************************************************/ /* test_math.cpp */ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ /* http://www.godotengine.org */ /*************************************************************************/ /* Copyright (c) 2007-2016 Juan Linietsky, Ariel Manzur. */ /* */ /* Permission is hereby granted, free of charge, to any person obtaining */ /* a copy of this software and associated documentation files (the */ /* "Software"), to deal in the Software without restriction, including */ /* without limitation the rights to use, copy, modify, merge, publish, */ /* distribute, sublicense, and/or sell copies of the Software, and to */ /* permit persons to whom the Software is furnished to do so, subject to */ /* the following conditions: */ /* */ /* The above copyright notice and this permission notice shall be */ /* included in all copies or substantial portions of the Software. */ /* */ /* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ /* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ /* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ /* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ /* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ #include "test_math.h" #include "ustring.h" #include "print_string.h" #include "transform.h" #include "matrix3.h" #include "math_funcs.h" #include "camera_matrix.h" #include "scene/main/node.h" #include "variant.h" #include "servers/visual/shader_language.h" #include "os/keyboard.h" #include "scene/resources/texture.h" #include "vmap.h" #include "os/os.h" namespace TestMath { void test_vec(Plane p_vec) { CameraMatrix cm; cm.set_perspective(45,1,0,100); Plane v0=cm.xform4(p_vec); print_line("out: "+v0); v0.normal.z = (v0.d/100.0 *2.0-1.0) * v0.d; print_line("out_F: "+v0); /*v0: 0, 0, -0.1, 0.1 v1: 0, 0, 0, 0.1 fix: 0, 0, 0, 0.1 v0: 0, 0, 1.302803, 1.5 v1: 0, 0, 1.401401, 1.5 fix: 0, 0, 1.401401, 1.5 v0: 0, 0, 25.851850, 26 v1: 0, 0, 25.925926, 26 fix: 0, 0, 25.925924, 26 v0: 0, 0, 49.899902, 50 v1: 0, 0, 49.949947, 50 fix: 0, 0, 49.949951, 50 v0: 0, 0, 100, 100 v1: 0, 0, 100, 100 fix: 0, 0, 100, 100 */ } uint32_t ihash( uint32_t a) { a = (a+0x7ed55d16) + (a<<12); a = (a^0xc761c23c) ^ (a>>19); a = (a+0x165667b1) + (a<<5); a = (a+0xd3a2646c) ^ (a<<9); a = (a+0xfd7046c5) + (a<<3); a = (a^0xb55a4f09) ^ (a>>16); return a; } uint32_t ihash2( uint32_t a) { a = (a ^ 61) ^ (a >> 16); a = a + (a << 3); a = a ^ (a >> 4); a = a * 0x27d4eb2d; a = a ^ (a >> 15); return a; } uint32_t ihash3( uint32_t a) { a = (a+0x479ab41d) + (a<<8); a = (a^0xe4aa10ce) ^ (a>>5); a = (a+0x9942f0a6) - (a<<14); a = (a^0x5aedd67d) ^ (a>>3); a = (a+0x17bea992) + (a<<7); return a; } MainLoop* test() { { Vector hashes; List tl; ObjectTypeDB::get_type_list(&tl); for (List::Element *E=tl.front();E;E=E->next()) { Vector m5b = E->get().operator String().md5_buffer(); uint32_t *ub = (uint32_t*)m5b.ptr(); //hashes.push_back(ihash(ihash2(ihash3(*ub)))); hashes.push_back(hashes.size()); //hashes.push_back(E->get().hash()); } //hashes.resize(50); for(int i=nearest_shift(hashes.size());i<20;i++) { bool success=true; for(int s=0;s<10000;s++) { Set existing; success=true; for(int j=0;j args; args.push_back("-l"); Error err = OS::get_singleton()->execute("/bin/ls",args,true,NULL,&ret); print_line("error: "+itos(err)); print_line(ret); return NULL; Matrix3 m3; m3.rotate(Vector3(1,0,0),0.2); m3.rotate(Vector3(0,1,0),1.77); m3.rotate(Vector3(0,0,1),212); Matrix3 m32; m32.set_euler(m3.get_euler()); print_line("ELEULEEEEEEEEEEEEEEEEEER: "+m3.get_euler()+" vs "+m32.get_euler()); return NULL; { Dictionary d; d["momo"]=1; Dictionary b=d; b["44"]=4; } return NULL; print_line("inters: "+rtos(Geometry::segment_intersects_circle(Vector2(-5,0),Vector2(-2,0),Vector2(),1.0))); print_line("cross: "+Vector3(1,2,3).cross(Vector3(4,5,7))); print_line("dot: "+rtos(Vector3(1,2,3).dot(Vector3(4,5,7)))); print_line("abs: "+Vector3(-1,2,-3).abs()); print_line("distance_to: "+rtos(Vector3(1,2,3).distance_to(Vector3(4,5,7)))); print_line("distance_squared_to: "+rtos(Vector3(1,2,3).distance_squared_to(Vector3(4,5,7)))); print_line("plus: "+(Vector3(1,2,3)+Vector3(Vector3(4,5,7)))); print_line("minus: "+(Vector3(1,2,3)-Vector3(Vector3(4,5,7)))); print_line("mul: "+(Vector3(1,2,3)*Vector3(Vector3(4,5,7)))); print_line("div: "+(Vector3(1,2,3)/Vector3(Vector3(4,5,7)))); print_line("mul scalar: "+(Vector3(1,2,3)*2)); print_line("premul scalar: "+(2*Vector3(1,2,3))); print_line("div scalar: "+(Vector3(1,2,3)/3.0)); print_line("length: "+rtos(Vector3(1,2,3).length())); print_line("length squared: "+rtos(Vector3(1,2,3).length_squared())); print_line("normalized: "+Vector3(1,2,3).normalized()); print_line("inverse: "+Vector3(1,2,3).inverse()); { Vector3 v(4,5,7); v.normalize(); print_line("normalize: "+v); } { Vector3 v(4,5,7); v+=Vector3(1,2,3); print_line("+=: "+v); } { Vector3 v(4,5,7); v-=Vector3(1,2,3); print_line("-=: "+v); } { Vector3 v(4,5,7); v*=Vector3(1,2,3); print_line("*=: "+v); } { Vector3 v(4,5,7); v/=Vector3(1,2,3); print_line("/=: "+v); } { Vector3 v(4,5,7); v*=2.0; print_line("scalar *=: "+v); } { Vector3 v(4,5,7); v/=2.0; print_line("scalar /=: "+v); } #if 0 print_line(String("C:\\momo\\.\\popo\\..\\gongo").simplify_path()); print_line(String("res://../popo/..//gongo").simplify_path()); print_line(String("res://..").simplify_path()); DVector a; DVector b; a.resize(20); b=a; b.resize(30); a=b; #endif #if 0 String za = String::utf8("รก"); printf("unicode: %x\n",za[0]); CharString cs=za.utf8(); for(int i=0;i path; path.push_back("three"); path.push_back("two"); path.push_back("one"); path.push_back("comeon"); path.revert(); NodePath np(path,true); print_line(np); return NULL; bool a=2; print_line(Variant(a)); Matrix32 mat2_1; mat2_1.rotate(0.5); Matrix32 mat2_2; mat2_2.translate(Vector2(1,2)); Matrix32 mat2_3 = mat2_1 * mat2_2; mat2_3.affine_invert(); print_line(mat2_3.elements[0]); print_line(mat2_3.elements[1]); print_line(mat2_3.elements[2]); Transform mat3_1; mat3_1.basis.rotate(Vector3(0,0,1),0.5); Transform mat3_2; mat3_2.translate(Vector3(1,2,0)); Transform mat3_3 = mat3_1 * mat3_2; mat3_3.affine_invert(); print_line(mat3_3.basis.get_axis(0)); print_line(mat3_3.basis.get_axis(1)); print_line(mat3_3.origin); #endif return NULL; } }