From 1f2ea0ea90dc03344e1e3ca10a6783df1787e08c Mon Sep 17 00:00:00 2001 From: Bixilon Date: Fri, 30 Jun 2023 00:17:49 +0200 Subject: [PATCH] optimize EntityRotation::front, tests --- .../minosoft/data/entities/EntityRotation.kt | 16 +++++++++++----- .../data/entities/EntityRotationTest.kt | 19 +++++++++++++++++++ 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/main/java/de/bixilon/minosoft/data/entities/EntityRotation.kt b/src/main/java/de/bixilon/minosoft/data/entities/EntityRotation.kt index 40f642b3b..b52385774 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/EntityRotation.kt +++ b/src/main/java/de/bixilon/minosoft/data/entities/EntityRotation.kt @@ -24,11 +24,17 @@ data class EntityRotation( val pitch: Float, ) { val front: Vec3 - get() = Vec3( - (-yaw).rad.sin * pitch.rad.cos, - (-pitch).rad.sin, - (-yaw).rad.cos * pitch.rad.cos - ).normalize() + get() { + val pitchRad = pitch.rad + val pitchCos = pitchRad.cos + val yawRad = -yaw.rad + + return Vec3( + yawRad.sin * pitchCos, + -pitchRad.sin, + yawRad.cos * pitchCos + ).normalize() + } override fun toString(): String { return "(yaw=$yaw, pitch=$pitch)" diff --git a/src/test/java/de/bixilon/minosoft/data/entities/EntityRotationTest.kt b/src/test/java/de/bixilon/minosoft/data/entities/EntityRotationTest.kt index b63c89038..5412b1439 100644 --- a/src/test/java/de/bixilon/minosoft/data/entities/EntityRotationTest.kt +++ b/src/test/java/de/bixilon/minosoft/data/entities/EntityRotationTest.kt @@ -13,6 +13,7 @@ package de.bixilon.minosoft.data.entities +import de.bixilon.kotlinglm.vec3.Vec3 import de.bixilon.minosoft.data.entities.EntityRotation.Companion.interpolateYaw import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test @@ -53,4 +54,22 @@ class EntityRotationTest { fun interpolation7() { assertEquals(150.0f, interpolateYaw(0.5f, 110.0f, -170.0f)) } + + @Test + fun front1() { + val front = EntityRotation(10.0f, 20.0f).front + assertEquals(front, Vec3(-0.16317593, -0.34202015, 0.92541665)) + } + + @Test + fun front2() { + val front = EntityRotation(-10.0f, -20.0f).front + assertEquals(front, Vec3(0.16317593, 0.34202015, 0.92541665)) + } + + @Test + fun front3() { + val front = EntityRotation(-80.0f, 80.0f).front + assertEquals(front, Vec3(0.1710101, -0.9848077, 0.030153705)) + } }