LCOV - code coverage report
Current view: top level - core/geom - SPVec3.cc (source / functions) Hit Total Coverage
Test: coverage.info Lines: 45 45 100.0 %
Date: 2024-05-12 00:16:13 Functions: 6 6 100.0 %

          Line data    Source code
       1             : /**
       2             : Copyright 2013 BlackBerry Inc.
       3             : Copyright (c) 2017-2022 Roman Katuntsev <sbkarr@stappler.org>
       4             : Copyright (c) 2023 Stappler LLC <admin@stappler.dev>
       5             : 
       6             : Licensed under the Apache License, Version 2.0 (the "License");
       7             : you may not use this file except in compliance with the License.
       8             : You may obtain a copy of the License at
       9             : 
      10             : http://www.apache.org/licenses/LICENSE-2.0
      11             : 
      12             : Unless required by applicable law or agreed to in writing, software
      13             : distributed under the License is distributed on an "AS IS" BASIS,
      14             : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      15             : See the License for the specific language governing permissions and
      16             : limitations under the License.
      17             : 
      18             : Original file from GamePlay3D: http://gameplay3d.org
      19             : 
      20             : This file was modified to fit the cocos2d-x project
      21             : This file was modified for stappler project
      22             : */
      23             : 
      24             : #include "SPVec3.h"
      25             : #include "SPGeometry.h"
      26             : 
      27             : namespace STAPPLER_VERSIONIZED stappler::geom {
      28             : 
      29          25 : Vec3::Vec3(const Size3 &s) : x(s.width), y(s.height), z(s.depth) { }
      30             : 
      31          25 : Vec3::Vec3(const Extent3 &s) : x(s.width), y(s.height), z(s.depth) { }
      32             : 
      33          25 : float Vec3::angle(const Vec3& v1, const Vec3& v2) {
      34          25 :         const float dx = v1.y * v2.z - v1.z * v2.y;
      35          25 :         const float dy = v1.z * v2.x - v1.x * v2.z;
      36          25 :         const float dz = v1.x * v2.y - v1.y * v2.x;
      37             : 
      38          25 :         return atan2f(sqrt(dx * dx + dy * dy + dz * dz) + math::MATH_FLOAT_SMALL, dot(v1, v2));
      39             : }
      40             : 
      41          50 : void Vec3::clamp(const Vec3& min, const Vec3& max) {
      42          50 :         assert(!(min.x > max.x || min.y > max.y || min.z > max.z));
      43             : 
      44             :         // Clamp the x value.
      45          50 :         if (x < min.x) {
      46          25 :                 x = min.x;
      47             :         }
      48          50 :         if (x > max.x) {
      49          25 :                 x = max.x;
      50             :         }
      51             : 
      52             :         // Clamp the y value.
      53          50 :         if (y < min.y) {
      54          25 :                 y = min.y;
      55             :         }
      56          50 :         if (y > max.y) {
      57          25 :                 y = max.y;
      58             :         }
      59             : 
      60             :         // Clamp the z value.
      61          50 :         if (z < min.z) {
      62          25 :                 z = min.z;
      63             :         }
      64          50 :         if (z > max.z) {
      65          25 :                 z = max.z;
      66             :         }
      67          50 : }
      68             : 
      69          50 : void Vec3::clamp(const Vec3& v, const Vec3& min, const Vec3& max, Vec3* dst) {
      70          50 :         assert(dst);
      71          50 :         assert(!(min.x > max.x || min.y > max.y || min.z > max.z));
      72             : 
      73             :         // Clamp the x value.
      74          50 :         dst->x = v.x;
      75          50 :         if (dst->x < min.x) {
      76          25 :                 dst->x = min.x;
      77             :         }
      78          50 :         if (dst->x > max.x) {
      79          25 :                 dst->x = max.x;
      80             :         }
      81             : 
      82             :         // Clamp the y value.
      83          50 :         dst->y = v.y;
      84          50 :         if (dst->y < min.y) {
      85          25 :                 dst->y = min.y;
      86             :         }
      87          50 :         if (dst->y > max.y) {
      88          25 :                 dst->y = max.y;
      89             :         }
      90             : 
      91             :         // Clamp the z value.
      92          50 :         dst->z = v.z;
      93          50 :         if (dst->z < min.z) {
      94          25 :                 dst->z = min.z;
      95             :         }
      96          50 :         if (dst->z > max.z) {
      97          25 :                 dst->z = max.z;
      98             :         }
      99          50 : }
     100             : 
     101          75 : Vec3 Vec3::getNormalized() const {
     102          75 :         Vec3 v(*this);
     103          75 :         v.normalize();
     104          75 :         return v;
     105             : }
     106             : 
     107             : #ifdef __LCC__
     108             : 
     109             : const Vec3 Vec3::ZERO(0.0f, 0.0f, 0.0f);
     110             : const Vec3 Vec3::ONE(1.0f, 1.0f, 1.0f);
     111             : const Vec3 Vec3::UNIT_X(1.0f, 0.0f, 0.0f);
     112             : const Vec3 Vec3::UNIT_Y(0.0f, 1.0f, 0.0f);
     113             : const Vec3 Vec3::UNIT_Z(0.0f, 0.0f, 1.0f);
     114             : 
     115             : #endif
     116             : 
     117             : }

Generated by: LCOV version 1.14