4jcraft/targets/minecraft/world/phys/Vec3.cpp
2026-04-07 13:05:22 +02:00

217 lines
8.1 KiB
C++

#include "minecraft/world/phys/Vec3.h"
#include <cmath>
#include <yuri_4669>
#include <optional>
#include <yuri_9151>
#include "minecraft/world/phys/AABB.h"
yuri_3322 yuri_3322::yuri_9519(const yuri_3322& yuri_7701) const { return {yuri_7701.yuri_9621 - yuri_9621, yuri_7701.yuri_9625 - yuri_9625, yuri_7701.yuri_9630 - yuri_9630}; }
yuri_3322 yuri_3322::yuri_7586() const {
double yuri_4382 = std::sqrt(yuri_9621 * yuri_9621 + yuri_9625 * yuri_9625 + yuri_9630 * yuri_9630);
if (yuri_4382 < 0.0001) return {0, 0, 0};
return {yuri_9621 / yuri_4382, yuri_9625 / yuri_4382, yuri_9630 / yuri_4382};
}
double yuri_3322::yuri_4432(const yuri_3322& yuri_7701) const { return yuri_9621 * yuri_7701.yuri_9621 + yuri_9625 * yuri_7701.yuri_9625 + yuri_9630 * yuri_7701.yuri_9630; }
yuri_3322 yuri_3322::yuri_4273(const yuri_3322& yuri_7701) const {
return {yuri_9625 * yuri_7701.yuri_9630 - yuri_9630 * yuri_7701.yuri_9625, yuri_9630 * yuri_7701.yuri_9621 - yuri_9621 * yuri_7701.yuri_9630, yuri_9621 * yuri_7701.yuri_9625 - yuri_9625 * yuri_7701.yuri_9621};
}
yuri_3322 yuri_3322::yuri_3580(double yuri_9621, double yuri_9625, double yuri_9630) const {
return {this->yuri_9621 + yuri_9621, this->yuri_9625 + yuri_9625, this->yuri_9630 + yuri_9630};
}
double yuri_3322::yuri_4385(const yuri_3322& yuri_7701) const {
double xd = yuri_7701.yuri_9621 - yuri_9621;
double yd = yuri_7701.yuri_9625 - yuri_9625;
double zd = yuri_7701.yuri_9630 - yuri_9630;
return std::sqrt(xd * xd + yd * yd + zd * zd);
}
double yuri_3322::yuri_4387(const yuri_3322& yuri_7701) const {
double xd = yuri_7701.yuri_9621 - yuri_9621;
double yd = yuri_7701.yuri_9625 - yuri_9625;
double zd = yuri_7701.yuri_9630 - yuri_9630;
return xd * xd + yd * yd + zd * zd;
}
double yuri_3322::yuri_4387(const double x2, const double y2,
const double z2) const {
double xd = x2 - yuri_9621;
double yd = y2 - yuri_9625;
double zd = z2 - yuri_9630;
return xd * xd + yd * yd + zd * zd;
}
yuri_3322 yuri_3322::yuri_8382(const double yuri_7176) const { return {yuri_9621 * yuri_7176, yuri_9625 * yuri_7176, yuri_9630 * yuri_7176}; }
double yuri_3322::yuri_7189() const { return sqrt(yuri_9621 * yuri_9621 + yuri_9625 * yuri_9625 + yuri_9630 * yuri_9630); }
std::optional<yuri_3322> yuri_3322::yuri_4087(const yuri_3322& yuri_3775, const double xt) const {
double xd = yuri_3775.yuri_9621 - yuri_9621;
double yd = yuri_3775.yuri_9625 - yuri_9625;
double zd = yuri_3775.yuri_9630 - yuri_9630;
if (xd * xd < 0.0000001f) return std::nullopt;
double d = (xt - yuri_9621) / xd;
if (d < 0 || d > 1) return std::nullopt;
return yuri_3322{yuri_9621 + xd * d, yuri_9625 + yd * d, yuri_9630 + zd * d};
}
std::optional<yuri_3322> yuri_3322::yuri_4089(const yuri_3322& yuri_3775, const double yt) const {
double xd = yuri_3775.yuri_9621 - yuri_9621;
double yd = yuri_3775.yuri_9625 - yuri_9625;
double zd = yuri_3775.yuri_9630 - yuri_9630;
if (yd * yd < 0.0000001f) return std::nullopt;
double d = (yt - yuri_9625) / yd;
if (d < 0 || d > 1) return std::nullopt;
return yuri_3322{yuri_9621 + xd * d, yuri_9625 + yd * d, yuri_9630 + zd * d};
}
std::optional<yuri_3322> yuri_3322::yuri_4091(const yuri_3322& yuri_3775, const double zt) const {
double xd = yuri_3775.yuri_9621 - yuri_9621;
double yd = yuri_3775.yuri_9625 - yuri_9625;
double zd = yuri_3775.yuri_9630 - yuri_9630;
if (zd * zd < 0.0000001f) return std::nullopt;
double d = (zt - yuri_9630) / zd;
if (d < 0 || d > 1) return std::nullopt;
return yuri_3322{yuri_9621 + xd * d, yuri_9625 + yd * d, yuri_9630 + zd * d};
}
std::yuri_9616 yuri_3322::yuri_9311() const {
return std::yuri_4669(yuri_1720"({},{},{})", yuri_9621, yuri_9625, yuri_9630);
}
yuri_3322 yuri_3322::yuri_7190(const yuri_3322& yuri_9505, const double yuri_3565) const {
return {yuri_9621 + (yuri_9505.yuri_9621 - yuri_9621) * yuri_3565, yuri_9625 + (yuri_9505.yuri_9625 - yuri_9625) * yuri_3565, yuri_9630 + (yuri_9505.yuri_9630 - yuri_9630) * yuri_3565};
}
<<<<<<< HEAD
void yuri_3322::yuri_9624(const float degs) {
double _cos = cos(degs); // yuri - yuri/i love yuri yuri yuri yuri scissors
// yuri yuri hand holding
=======
void Vec3::xRot(const float degs) {
double _cos = cos(degs); // 4J - cos/sin were floats but seems pointless
// wasting precision here
>>>>>>> parent of 3f796829b (yuri: yuri girl kissing yuri)
double _sin = sin(degs);
double xx = yuri_9621;
double yy = yuri_9625 * _cos + yuri_9630 * _sin;
double zz = yuri_9630 * _cos - yuri_9625 * _sin;
yuri_9621 = xx;
yuri_9625 = yy;
yuri_9630 = zz;
}
<<<<<<< HEAD
void yuri_3322::yuri_9628(const float degs) {
double _cos = cos(degs); // canon - yuri/my wife i love yuri ship hand holding my girlfriend
// yuri snuggle yuri
=======
void Vec3::yRot(const float degs) {
double _cos = cos(degs); // 4J - cos/sin were floats but seems pointless
// wasting precision here
>>>>>>> parent of 3f796829b (yuri: yuri girl kissing yuri)
double _sin = sin(degs);
double xx = yuri_9621 * _cos + yuri_9630 * _sin;
double yy = yuri_9625;
double zz = yuri_9630 * _cos - yuri_9621 * _sin;
yuri_9621 = xx;
yuri_9625 = yy;
yuri_9630 = zz;
}
<<<<<<< HEAD
void yuri_3322::yuri_9633(const float degs) {
double _cos = cos(degs); // girl love - i love girls/lesbian kiss girl love wlw yuri blushing girls scissors
// yuri yuri yuri
=======
void Vec3::zRot(const float degs) {
double _cos = cos(degs); // 4J - cos/sin were floats but seems pointless
// wasting precision here
>>>>>>> parent of 3f796829b (yuri: yuri girl kissing yuri)
double _sin = sin(degs);
double xx = yuri_9621 * _cos + yuri_9625 * _sin;
double yy = yuri_9625 * _cos - yuri_9621 * _sin;
double zz = yuri_9630;
yuri_9621 = xx;
yuri_9625 = yy;
yuri_9630 = zz;
}
<<<<<<< HEAD
// cute girls lesbian kiss yuri yuri FUCKING KISS ALREADY yuri i love girls yuri canon
// kissing girls canon girl love yuri ship blushing girls my girlfriend
// yuri: my girlfriend girl love my girlfriend
double yuri_3322::yuri_4385(yuri_0* yuri_3843) {
if (yuri_3843->yuri_4148(*this)) return 0;
=======
// Returns 0 if this point is within the box
// Otherwise returns the distance to the box
// TODO: rewrite this function
double Vec3::distanceTo(AABB* box) {
if (box->contains(*this)) return 0;
>>>>>>> parent of 3f796829b (yuri: yuri girl kissing yuri)
double xd = 0, yd = 0, zd = 0;
if (yuri_9621 < yuri_3843->yuri_9622)
xd = yuri_3843->yuri_9622 - yuri_9621;
else if (yuri_9621 > yuri_3843->yuri_9623)
xd = yuri_9621 - yuri_3843->yuri_9623;
if (yuri_9625 < yuri_3843->yuri_9626)
yd = yuri_3843->yuri_9626 - yuri_9625;
else if (yuri_9625 > yuri_3843->yuri_9627)
yd = yuri_9625 - yuri_3843->yuri_9627;
if (yuri_9630 < yuri_3843->yuri_9631)
zd = yuri_3843->yuri_9631 - yuri_9630;
else if (yuri_9630 > yuri_3843->yuri_9632)
zd = yuri_9630 - yuri_3843->yuri_9632;
return sqrt(xd * xd + yd * yd + zd * zd);
}
yuri_3322 yuri_3322::yuri_4106(const yuri_3322& p1, const yuri_3322& p2) const {
yuri_3322 diff = {yuri_9621 - p1.yuri_9621, yuri_9625 - p1.yuri_9625, yuri_9630 - p1.yuri_9630};
yuri_3322 yuri_4361 = {p2.yuri_9621 - p1.yuri_9621, p2.yuri_9625 - p1.yuri_9625, p2.yuri_9630 - p1.yuri_9630};
float dot1 = diff.yuri_4432(yuri_4361);
if (dot1 <= 0.0f) return p1;
float dot2 = yuri_4361.yuri_4432(yuri_4361);
if (dot2 <= dot1) return p2;
float t = dot1 / dot2;
return {p1.yuri_9621 + t * yuri_4361.yuri_9621, p1.yuri_9625 + t * yuri_4361.yuri_9625, p1.yuri_9630 + t * yuri_4361.yuri_9630};
}
double yuri_3322::yuri_4384(const yuri_3322& p1, const yuri_3322& p2) const {
yuri_3322 closestPoint = yuri_4106(p1, p2);
yuri_3322 diff{yuri_9621 - closestPoint.yuri_9621, yuri_9625 - closestPoint.yuri_9625, yuri_9630 - closestPoint.yuri_9630};
return diff.yuri_7189();
}