瀏覽代碼

Merge 60cbb26f9f into b926765ce0

pull/21/merge
Constantine 10 年之前
父節點
當前提交
a0969892cc
共有 2 個文件被更改,包括 35 次插入0 次删除
  1. +33
    -0
      src/raymath.c
  2. +2
    -0
      src/raymath.h

+ 33
- 0
src/raymath.c 查看文件

@ -131,6 +131,39 @@ void VectorScale(Vector3 *v, float scale)
v->z *= scale;
}
// Rotate vector by axis and angle from the global center
void VectorRotate(Vector3 *v, Vector3 axis, float angle)
{
VectorNormalize(&axis);
float a = angle * (PI / 180.0f);
float sina = sin(a);
float cosa = cos(a);
float cosb = 1.0f - cosa;
float xrot = v->x * (axis.x * axis.x * cosb + cosa)
+ v->y * (axis.x * axis.y * cosb - axis.z * sina)
+ v->z * (axis.x * axis.z * cosb + axis.y * sina);
float yrot = v->x * (axis.y * axis.x * cosb + axis.z * sina)
+ v->y * (axis.y * axis.y * cosb + cosa)
+ v->z * (axis.y * axis.z * cosb - axis.x * sina);
float zrot = v->x * (axis.z * axis.x * cosb - axis.y * sina)
+ v->y * (axis.z * axis.y * cosb + axis.x * sina)
+ v->z * (axis.z * axis.z * cosb + cosa);
*v = (Vector3){ xrot, yrot, zrot };
}
// Rotate vector by axis and angle around the pivot point
void VectorRotateAround(Vector3 *v, Vector3 pivot, Vector3 axis, float angle)
{
*v = VectorSubtract(*v, pivot);
VectorRotate(v, axis, angle);
*v = VectorAdd(*v, pivot);
}
// Negate provided vector (invert direction)
void VectorNegate(Vector3 *v)
{

+ 2
- 0
src/raymath.h 查看文件

@ -86,6 +86,8 @@ Vector3 VectorPerpendicular(Vector3 v); // Calculate one vector
float VectorDotProduct(Vector3 v1, Vector3 v2); // Calculate two vectors dot product
float VectorLength(const Vector3 v); // Calculate vector lenght
void VectorScale(Vector3 *v, float scale); // Scale provided vector
void VectorRotate(Vector3 *v, Vector3 axis, float angle); // Rotate vector by axis and angle from the global center
void VectorRotateAround(Vector3 *v, Vector3 pivot, Vector3 axis, float angle); // Rotate vector by axis and angle around the pivot point
void VectorNegate(Vector3 *v); // Negate provided vector (invert direction)
void VectorNormalize(Vector3 *v); // Normalize provided vector
float VectorDistance(Vector3 v1, Vector3 v2); // Calculate distance between two points

Loading…
取消
儲存