OpenSim
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Macros
float4.cs
Go to the documentation of this file.
1 /* The MIT License
2  *
3  * Copyright (c) 2010 Intel Corporation.
4  * All rights reserved.
5  *
6  * Based on the convexdecomposition library from
7  * <http://codesuppository.googlecode.com> by John W. Ratcliff and Stan Melax.
8  *
9  * Permission is hereby granted, free of charge, to any person obtaining a copy
10  * of this software and associated documentation files (the "Software"), to deal
11  * in the Software without restriction, including without limitation the rights
12  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13  * copies of the Software, and to permit persons to whom the Software is
14  * furnished to do so, subject to the following conditions:
15  *
16  * The above copyright notice and this permission notice shall be included in
17  * all copies or substantial portions of the Software.
18  *
19  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
25  * THE SOFTWARE.
26  */
27 
28 using System;
29 
30 namespace OpenSim.Region.PhysicsModules.ConvexDecompositionDotNet
31 {
32  public class float4
33  {
34  public float x;
35  public float y;
36  public float z;
37  public float w;
38 
39  public float4()
40  {
41  x = 0;
42  y = 0;
43  z = 0;
44  w = 0;
45  }
46 
47  public float4(float _x, float _y, float _z, float _w)
48  {
49  x = _x;
50  y = _y;
51  z = _z;
52  w = _w;
53  }
54 
55  public float4(float3 v, float _w)
56  {
57  x = v.x;
58  y = v.y;
59  z = v.z;
60  w = _w;
61  }
62 
63  public float4(float4 f)
64  {
65  x = f.x;
66  y = f.y;
67  z = f.z;
68  w = f.w;
69  }
70 
71  public float this[int i]
72  {
73  get
74  {
75  switch (i)
76  {
77  case 0: return x;
78  case 1: return y;
79  case 2: return z;
80  case 3: return w;
81  }
82  throw new ArgumentOutOfRangeException();
83  }
84  }
85 
86  public float3 xyz()
87  {
88  return new float3(x, y, z);
89  }
90 
91  public void setxyz(float3 xyz)
92  {
93  x = xyz.x;
94  y = xyz.y;
95  z = xyz.z;
96  }
97 
98  public override int GetHashCode()
99  {
100  return x.GetHashCode() ^ y.GetHashCode() ^ z.GetHashCode() ^ w.GetHashCode();
101  }
102 
103  public override bool Equals(object obj)
104  {
105  float4 f = obj as float4;
106  if (f == null)
107  return false;
108 
109  return this == f;
110  }
111 
112  public static float4 Homogenize(float3 v3)
113  {
114  return Homogenize(v3, 1.0f);
115  }
116 
117  //C++ TO C# CONVERTER NOTE: C# does not allow default values for parameters. Overloaded methods are inserted above.
118  //ORIGINAL LINE: float4 Homogenize(const float3 &v3, const float &w =1.0f)
119  public static float4 Homogenize(float3 v3, float w)
120  {
121  return new float4(v3.x, v3.y, v3.z, w);
122  }
123 
124  public static float4 cmul(float4 a, float4 b)
125  {
126  return new float4(a.x * b.x, a.y * b.y, a.z * b.z, a.w * b.w);
127  }
128 
129  public static float4 operator +(float4 a, float4 b)
130  {
131  return new float4(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w);
132  }
133  public static float4 operator -(float4 a, float4 b)
134  {
135  return new float4(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w);
136  }
137 
138  public static float4 operator *(float4 v, float4x4 m)
139  {
140  return v.x * m.x + v.y * m.y + v.z * m.z + v.w * m.w; // yes this actually works
141  }
142 
143  public static bool operator ==(float4 a, float4 b)
144  {
145  // If both are null, or both are same instance, return true.
146  if (System.Object.ReferenceEquals(a, b))
147  return true;
148  // If one is null, but not both, return false.
149  if (((object)a == null) || ((object)b == null))
150  return false;
151 
152  return (a.x == b.x && a.y == b.y && a.z == b.z && a.w == b.w);
153  }
154 
155  public static bool operator !=(float4 a, float4 b)
156  {
157  return !(a == b);
158  }
159 
160  public static float4 operator *(float4 v, float s)
161  {
162  return new float4(v.x * s, v.y * s, v.z * s, v.w * s);
163  }
164 
165  public static float4 operator *(float s, float4 v)
166  {
167  return new float4(v.x * s, v.y * s, v.z * s, v.w * s);
168  }
169  }
170 }
float4(float _x, float _y, float _z, float _w)
Definition: float4.cs:47