Changeset c62013e for libcfa/src/vec/vec3.hfa
- Timestamp:
- Jul 14, 2026, 9:26:24 PM (5 hours ago)
- Branches:
- master
- Children:
- a12816e7
- Parents:
- f41b161
- File:
-
- 1 edited
-
libcfa/src/vec/vec3.hfa (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/vec/vec3.hfa
rf41b161 rc62013e 19 19 #include "vec.hfa" 20 20 21 forall (T) {21 forall( T ) { 22 22 struct vec3 { 23 23 T x, y, z; … … 25 25 } 26 26 27 forall (T) { 28 static inline { 29 30 void ?{}(vec3(T)& v, T x, T y, T z) { 27 static inline forall( T ) { 28 void ?{}( vec3( T )& v, T x, T y, T z ) { 31 29 v.[x, y, z] = [x, y, z]; 32 30 } 33 31 34 forall( | zero_assign(T))35 void ?{}( vec3(T)& vec, zero_t) with (vec) {32 forall( | zero_assign( T ) ) 33 void ?{}( vec3( T )& vec, zero_t ) with ( vec ) { 36 34 x = y = z = 0; 37 35 } 38 36 39 void ?{}( vec3(T)& vec, T val) with (vec) {37 void ?{}( vec3( T )& vec, T val ) with ( vec ) { 40 38 x = y = z = val; 41 39 } 42 40 43 void ?{}( vec3(T)& vec, vec3(T) other) with (vec) {41 void ?{}( vec3( T )& vec, vec3( T ) other ) with ( vec ) { 44 42 [x,y,z] = other.[x,y,z]; 45 43 } 46 44 47 void ?=?( vec3(T)& vec, vec3(T) other) with (vec) {45 void ?=?( vec3( T )& vec, vec3( T ) other ) with ( vec ) { 48 46 [x,y,z] = other.[x,y,z]; 49 47 } 50 forall(| zero_assign(T)) 51 void ?=?(vec3(T)& vec, zero_t) with (vec) { 48 49 forall( | zero_assign( T ) ) 50 void ?=?( vec3( T )& vec, zero_t ) with ( vec ) { 52 51 x = y = z = 0; 53 52 } … … 56 55 57 56 // - 58 forall(| subtract(T)) { 59 vec3(T) ?-?(vec3(T) u, vec3(T) v) { 60 return [u.x - v.x, u.y - v.y, u.z - v.z]; 61 } 62 vec3(T)& ?-=?(vec3(T)& u, vec3(T) v) { 63 u = u - v; 64 return u; 65 } 66 } 67 forall(| negate(T)) { 68 vec3(T) -?(vec3(T) v) with (v) { 69 return [-x, -y, -z]; 70 } 71 } 72 forall(| { T --?(T&); }) { 73 vec3(T)& --?(vec3(T)& v) { 74 --v.x; 75 --v.y; 76 --v.z; 77 return v; 78 } 79 vec3(T) ?--(vec3(T)& v) { 80 vec3(T) copy = v; 81 --v; 82 return copy; 83 } 57 forall( | subtract( T ) ) { 58 vec3( T ) ?-?( vec3( T ) u, vec3( T ) v ) { 59 return [u.x - v.x, u.y - v.y, u.z - v.z]; 60 } 61 vec3( T )& ?-=?( vec3( T )& u, vec3( T ) v ) { 62 u = u - v; 63 return u; 64 } 65 } 66 67 forall( | negate( T ) ) { 68 vec3( T ) -?( vec3( T ) v ) with ( v ) { 69 return [-x, -y, -z]; 70 } 71 } 72 73 forall( | { T --?( T&); }) { 74 vec3( T )& --?( vec3( T )& v ) { 75 --v.x; 76 --v.y; 77 --v.z; 78 return v; 79 } 80 vec3( T ) ?--( vec3( T )& v ) { 81 vec3( T ) copy = v; 82 --v; 83 return copy; 84 } 84 85 } 85 86 86 87 // + 87 forall( | add(T)) {88 vec3(T) ?+?(vec3(T) u, vec3(T) v) {89 return [u.x + v.x, u.y + v.y, u.z + v.z];90 }91 vec3(T)& ?+=?(vec3(T)& u, vec3(T) v) {92 u = u + v;93 return u;94 }95 } 96 97 forall( | { T ++?(T&); }) {98 vec3(T)& ++?(vec3(T)& v) {99 ++v.x;100 ++v.y;101 ++v.z;102 return v;103 }104 vec3(T) ?++(vec3(T)& v) {105 vec3(T) copy = v;106 ++v;107 return copy;108 }88 forall( | add( T ) ) { 89 vec3( T ) ?+?( vec3( T ) u, vec3( T ) v ) { 90 return [u.x + v.x, u.y + v.y, u.z + v.z]; 91 } 92 vec3( T )& ?+=?( vec3( T )& u, vec3( T ) v ) { 93 u = u + v; 94 return u; 95 } 96 } 97 98 forall( | { T ++?( T&); }) { 99 vec3( T )& ++?( vec3( T )& v ) { 100 ++v.x; 101 ++v.y; 102 ++v.z; 103 return v; 104 } 105 vec3( T ) ?++( vec3( T )& v ) { 106 vec3( T ) copy = v; 107 ++v; 108 return copy; 109 } 109 110 } 110 111 111 112 // * 112 forall( | multiply(T)) {113 vec3(T) ?*?(vec3(T) v, T scalar) with (v) {114 return [x * scalar, y * scalar, z * scalar];115 }116 vec3(T) ?*?(T scalar, vec3(T) v) {117 return v * scalar;118 }119 vec3(T) ?*?(vec3(T) u, vec3(T) v) {120 return [u.x * v.x, u.y * v.y, u.z * v.z];121 }122 vec3(T)& ?*=?(vec3(T)& v, T scalar) {123 v = v * scalar;124 return v;125 }126 vec3(T)& ?*=?(vec3(T)& u, vec3(T) v) {127 u = u * v;128 return u;129 }113 forall( | multiply( T ) ) { 114 vec3( T ) ?*?( vec3( T ) v, T scalar ) with ( v ) { 115 return [x * scalar, y * scalar, z * scalar]; 116 } 117 vec3( T ) ?*?( T scalar, vec3( T ) v ) { 118 return v * scalar; 119 } 120 vec3( T ) ?*?( vec3( T ) u, vec3( T ) v ) { 121 return [u.x * v.x, u.y * v.y, u.z * v.z]; 122 } 123 vec3( T )& ?*=?( vec3( T )& v, T scalar ) { 124 v = v * scalar; 125 return v; 126 } 127 vec3( T )& ?*=?( vec3( T )& u, vec3( T ) v ) { 128 u = u * v; 129 return u; 130 } 130 131 } 131 132 132 133 // / 133 forall( | divide(T)) {134 vec3(T) ?/?(vec3(T) v, T scalar) with (v) {135 return [x / scalar, y / scalar, z / scalar];136 }137 vec3(T) ?/?(vec3(T) u, vec3(T) v) {138 return [u.x / v.x, u.y / v.y, u.z / v.z];139 }140 vec3(T)& ?/=?(vec3(T)& v, T scalar) {141 v = v / scalar;142 return v;143 }144 vec3(T)& ?/=?(vec3(T)& u, vec3(T) v) {145 u = u / v;146 return u;147 }148 } 149 134 forall( | divide( T ) ) { 135 vec3( T ) ?/?( vec3( T ) v, T scalar ) with ( v ) { 136 return [x / scalar, y / scalar, z / scalar]; 137 } 138 vec3( T ) ?/?( vec3( T ) u, vec3( T ) v ) { 139 return [u.x / v.x, u.y / v.y, u.z / v.z]; 140 } 141 vec3( T )& ?/=?( vec3( T )& v, T scalar ) { 142 v = v / scalar; 143 return v; 144 } 145 vec3( T )& ?/=?( vec3( T )& u, vec3( T ) v ) { 146 u = u / v; 147 return u; 148 } 149 } 150 150 151 // % 151 forall( | { T ?%?(T,T); }) {152 vec3(T) ?%?(vec3(T) v, T scalar) with (v) {153 return [x % scalar, y % scalar, z % scalar];154 }155 vec3(T)& ?%=?(vec3(T)& u, T scalar) {156 u = u % scalar;157 return u;158 }159 vec3(T) ?%?(vec3(T) u, vec3(T) v) {160 return [u.x % v.x, u.y % v.y, u.z % v.z];161 }162 vec3(T)& ?%=?(vec3(T)& u, vec3(T) v) {163 u = u % v;164 return u;165 }152 forall( | { T ?%?( T,T ); }) { 153 vec3( T ) ?%?( vec3( T ) v, T scalar ) with ( v ) { 154 return [x % scalar, y % scalar, z % scalar]; 155 } 156 vec3( T )& ?%=?( vec3( T )& u, T scalar ) { 157 u = u % scalar; 158 return u; 159 } 160 vec3( T ) ?%?( vec3( T ) u, vec3( T ) v ) { 161 return [u.x % v.x, u.y % v.y, u.z % v.z]; 162 } 163 vec3( T )& ?%=?( vec3( T )& u, vec3( T ) v ) { 164 u = u % v; 165 return u; 166 } 166 167 } 167 168 168 169 // & 169 forall( | { T ?&?(T,T); }) {170 vec3(T) ?&?(vec3(T) v, T scalar) with (v) {171 return [x & scalar, y & scalar, z & scalar];172 }173 vec3(T)& ?&=?(vec3(T)& u, T scalar) {174 u = u & scalar;175 return u;176 }177 vec3(T) ?&?(vec3(T) u, vec3(T) v) {178 return [u.x & v.x, u.y & v.y, u.z & v.z];179 }180 vec3(T)& ?&=?(vec3(T)& u, vec3(T) v) {181 u = u & v;182 return u;183 }170 forall( | { T ?&?( T,T ); }) { 171 vec3( T ) ?&?( vec3( T ) v, T scalar ) with ( v ) { 172 return [x & scalar, y & scalar, z & scalar]; 173 } 174 vec3( T )& ?&=?( vec3( T )& u, T scalar ) { 175 u = u & scalar; 176 return u; 177 } 178 vec3( T ) ?&?( vec3( T ) u, vec3( T ) v ) { 179 return [u.x & v.x, u.y & v.y, u.z & v.z]; 180 } 181 vec3( T )& ?&=?( vec3( T )& u, vec3( T ) v ) { 182 u = u & v; 183 return u; 184 } 184 185 } 185 186 186 187 // | 187 forall( | { T ?|?(T,T); }) {188 vec3(T) ?|?(vec3(T) v, T scalar) with (v) {189 return [x | scalar, y | scalar, z | scalar];190 }191 vec3(T)& ?|=?(vec3(T)& u, T scalar) {192 u = u | scalar;193 return u;194 }195 vec3(T) ?|?(vec3(T) u, vec3(T) v) {196 return [u.x | v.x, u.y | v.y, u.z | v.z];197 }198 vec3(T)& ?|=?(vec3(T)& u, vec3(T) v) {199 u = u | v;200 return u;201 }188 forall( | { T ?|?( T,T ); }) { 189 vec3( T ) ?|?( vec3( T ) v, T scalar ) with ( v ) { 190 return [x | scalar, y | scalar, z | scalar]; 191 } 192 vec3( T )& ?|=?( vec3( T )& u, T scalar ) { 193 u = u | scalar; 194 return u; 195 } 196 vec3( T ) ?|?( vec3( T ) u, vec3( T ) v ) { 197 return [u.x | v.x, u.y | v.y, u.z | v.z]; 198 } 199 vec3( T )& ?|=?( vec3( T )& u, vec3( T ) v ) { 200 u = u | v; 201 return u; 202 } 202 203 } 203 204 204 205 // ^ 205 forall( | { T ?^?(T,T); }) {206 vec3(T) ?^?(vec3(T) v, T scalar) with (v) {207 return [x ^ scalar, y ^ scalar, z ^ scalar];208 }209 vec3(T)& ?^=?(vec3(T)& u, T scalar) {210 u = u ^ scalar;211 return u;212 }213 vec3(T) ?^?(vec3(T) u, vec3(T) v) {214 return [u.x ^ v.x, u.y ^ v.y, u.z ^ v.z];215 }216 vec3(T)& ?^=?(vec3(T)& u, vec3(T) v) {217 u = u ^ v;218 return u;219 }206 forall( | { T ?^?( T,T ); }) { 207 vec3( T ) ?^?( vec3( T ) v, T scalar ) with ( v ) { 208 return [x ^ scalar, y ^ scalar, z ^ scalar]; 209 } 210 vec3( T )& ?^=?( vec3( T )& u, T scalar ) { 211 u = u ^ scalar; 212 return u; 213 } 214 vec3( T ) ?^?( vec3( T ) u, vec3( T ) v ) { 215 return [u.x ^ v.x, u.y ^ v.y, u.z ^ v.z]; 216 } 217 vec3( T )& ?^=?( vec3( T )& u, vec3( T ) v ) { 218 u = u ^ v; 219 return u; 220 } 220 221 } 221 222 222 223 // << 223 forall( | { T ?<<?(T,T); }) {224 vec3(T) ?<<?(vec3(T) v, T scalar) with (v) {225 return [x << scalar, y << scalar, z << scalar];226 }227 vec3(T)& ?<<=?(vec3(T)& u, T scalar) {228 u = u << scalar;229 return u;230 }231 vec3(T) ?<<?(vec3(T) u, vec3(T) v) {232 return [u.x << v.x, u.y << v.y, u.z << v.z];233 }234 vec3(T)& ?<<=?(vec3(T)& u, vec3(T) v) {235 u = u << v;236 return u;237 }224 forall( | { T ?<<?( T,T ); }) { 225 vec3( T ) ?<<?( vec3( T ) v, T scalar ) with ( v ) { 226 return [x << scalar, y << scalar, z << scalar]; 227 } 228 vec3( T )& ?<<=?( vec3( T )& u, T scalar ) { 229 u = u << scalar; 230 return u; 231 } 232 vec3( T ) ?<<?( vec3( T ) u, vec3( T ) v ) { 233 return [u.x << v.x, u.y << v.y, u.z << v.z]; 234 } 235 vec3( T )& ?<<=?( vec3( T )& u, vec3( T ) v ) { 236 u = u << v; 237 return u; 238 } 238 239 } 239 240 240 241 // >> 241 forall( | { T ?>>?(T,T); }) {242 vec3(T) ?>>?(vec3(T) v, T scalar) with (v) {243 return [x >> scalar, y >> scalar, z >> scalar];244 }245 vec3(T)& ?>>=?(vec3(T)& u, T scalar) {246 u = u >> scalar;247 return u;248 }249 vec3(T) ?>>?(vec3(T) u, vec3(T) v) {250 return [u.x >> v.x, u.y >> v.y, u.z >> v.z];251 }252 vec3(T)& ?>>=?(vec3(T)& u, vec3(T) v) {253 u = u >> v;254 return u;255 }242 forall( | { T ?>>?( T,T ); }) { 243 vec3( T ) ?>>?( vec3( T ) v, T scalar ) with ( v ) { 244 return [x >> scalar, y >> scalar, z >> scalar]; 245 } 246 vec3( T )& ?>>=?( vec3( T )& u, T scalar ) { 247 u = u >> scalar; 248 return u; 249 } 250 vec3( T ) ?>>?( vec3( T ) u, vec3( T ) v ) { 251 return [u.x >> v.x, u.y >> v.y, u.z >> v.z]; 252 } 253 vec3( T )& ?>>=?( vec3( T )& u, vec3( T ) v ) { 254 u = u >> v; 255 return u; 256 } 256 257 } 257 258 258 259 // ~ 259 forall( | { T ~?(T); })260 vec3(T) ~?(vec3(T) v) with (v) {260 forall( | { T ~?( T ); }) 261 vec3( T ) ~?( vec3( T ) v ) with ( v ) { 261 262 return [~v.x, ~v.y, ~v.z]; 262 263 } 263 264 264 265 // relational 265 forall( | equality(T)) {266 bool ?==?(vec3(T) u, vec3(T) v) with (u) {267 return x == v.x && y == v.y && z == v.z;268 }269 bool ?!=?(vec3(T) u, vec3(T) v) {270 return !(u == v);271 }266 forall( | equality( T ) ) { 267 bool ?==?( vec3( T ) u, vec3( T ) v ) with ( u ) { 268 return x == v.x && y == v.y && z == v.z; 269 } 270 bool ?!=?( vec3( T ) u, vec3( T ) v ) { 271 return !( u == v ); 272 } 272 273 } 273 274 274 275 // Geometric functions 275 forall( | add(T) | multiply(T))276 T dot(vec3(T) u, vec3(T) v) {276 forall( | add( T ) | multiply( T ) ) 277 T dot( vec3( T ) u, vec3( T ) v ) { 277 278 return u.x * v.x + u.y * v.y + u.z * v.z; 278 279 } 279 280 280 forall(| subtract(T) | multiply(T)) 281 vec3(T) cross(vec3(T) u, vec3(T) v) { 282 return (vec3(T)){ u.y * v.z - v.y * u.z, 283 u.z * v.x - v.z * u.x, 284 u.x * v.y - v.x * u.y }; 285 } 286 287 } // static inline 281 forall( | subtract( T ) | multiply( T ) ) 282 vec3( T ) cross( vec3( T ) u, vec3( T ) v ) { 283 return ( vec3( T ) ){ u.y * v.z - v.y * u.z, 284 u.z * v.x - v.z * u.x, 285 u.x * v.y - v.x * u.y }; 286 } 288 287 } 289 288 290 forall( ostype &, T | writeable(T, ostype)) {291 ostype & ?|?( ostype & os, vec3(T) v) with (v) {289 forall( ostype &, T | writeable( T, ostype ) ) { 290 ostype & ?|?( ostype & os, vec3( T ) v ) with ( v ) { 292 291 return os | '<' | x | ',' | y | ',' | z | '>'; 293 292 } 294 OSTYPE_VOID_IMPL( os, vec3( T) )293 OSTYPE_VOID_IMPL( os, vec3( T ) ) 295 294 }
Note:
See TracChangeset
for help on using the changeset viewer.