123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- /*
- *
- * Mathematics Subpackage (VrMath)
- *
- *
- * Author: Samuel R. Buss, [email protected].
- * Web page: http://math.ucsd.edu/~sbuss/MathCG
- *
- *
- This software is provided 'as-is', without any express or implied warranty.
- In no event will the authors be held liable for any damages arising from the use of this software.
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it freely,
- subject to the following restrictions:
- 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
- *
- *
- */
- #include <math.h>
- #include "LinearR3.h"
- /****************************************************************
- Axes
- *****************************************************************/
- static float xx[] = {
- 0., 1., 0., 1.
- };
- static float xy[] = {
- -.5, .5, .5, -.5
- };
- static int xorder[] = {
- 1, 2, -3, 4
- };
- static float yx[] = {
- 0., 0., -.5, .5
- };
- static float yy[] = {
- 0.f, .6f, 1.f, 1.f
- };
- static int yorder[] = {
- 1, 2, 3, -2, 4
- };
- static float zx[] = {
- 1., 0., 1., 0., .25, .75
- };
- static float zy[] = {
- .5, .5, -.5, -.5, 0., 0.
- };
- static int zorder[] = {
- 1, 2, 3, 4, -5, 6
- };
- #define LENFRAC 0.10
- #define BASEFRAC 1.10
- /****************************************************************
- Arrow
- *****************************************************************/
- /* size of wings as fraction of length: */
- #define WINGS 0.10
- /* axes: */
- #define X 1
- #define Y 2
- #define Z 3
- /* x, y, z, axes: */
- static float axx[3] = { 1., 0., 0. };
- static float ayy[3] = { 0., 1., 0. };
- static float azz[3] = { 0., 0., 1. };
- /* function declarations: */
- void cross( float [3], float [3], float [3] );
- float dot( float [3], float [3] );
- float unit( float [3], float [3] );
- float dot( float v1[3], float v2[3] )
- {
- return( v1[0]*v2[0] + v1[1]*v2[1] + v1[2]*v2[2] );
- }
- void
- cross( float v1[3], float v2[3], float vout[3] )
- {
- float tmp[3];
- tmp[0] = v1[1]*v2[2] - v2[1]*v1[2];
- tmp[1] = v2[0]*v1[2] - v1[0]*v2[2];
- tmp[2] = v1[0]*v2[1] - v2[0]*v1[1];
- vout[0] = tmp[0];
- vout[1] = tmp[1];
- vout[2] = tmp[2];
- }
- float
- unit( float vin[3], float vout[3] )
- {
- float dist, f ;
- dist = vin[0]*vin[0] + vin[1]*vin[1] + vin[2]*vin[2];
- if( dist > 0.0 )
- {
- dist = sqrt( dist );
- f = 1. / dist;
- vout[0] = f * vin[0];
- vout[1] = f * vin[1];
- vout[2] = f * vin[2];
- }
- else
- {
- vout[0] = vin[0];
- vout[1] = vin[1];
- vout[2] = vin[2];
- }
- return( dist );
- }
|