Updated Source Generation Tools

This commit is contained in:
n00b
2024-09-15 10:55:15 -04:00
parent 10551c83f3
commit f013e6ba71
21 changed files with 22643 additions and 2972 deletions

View File

@@ -11,7 +11,9 @@
#endif
#endif
#include <cstdlib>
#include <ctime>
#include <ctime>
#include <irrlicht.h>
using namespace std;
@@ -22,21 +24,47 @@ int64_t rand_int(int64_t vmin, int64_t vmax) {
struct rc_matrix_type
{
{
bool active = false;
uint32_t r = 0;
uint32_t c = 0;
vector<double> data;
};
rc_matrix_type rc_matrix[1048];
std::vector<rc_matrix_type> rc_matrix(64);
#define RC_TMP_MATRIX 1024
#define RC_TMP_MATRIX_2 1025
#define RC_PROCESS_TMP_MATRIX_OFFSET 1026
#define NEW_MATRIX -1
int DimMatrix(int m, uint32_t m_rows, uint32_t m_cols, bool preserve_flag=false)
{
if(m < 0)
{
for(int i = 0; i < rc_matrix.size(); i++)
{
if(!rc_matrix[i].active)
{
m = i;
break;
}
}
if(m < 0)
{
rc_matrix_type mat;
mat.active = true;
m = rc_matrix.size();
rc_matrix.push_back(mat);
}
}
if(!preserve_flag)
rc_matrix[m].data.clear();
void DimMatrix(int m, uint32_t m_rows, uint32_t m_cols, bool preserve_flag=false)
{
rc_matrix[m].data.resize(m_rows*m_cols);
if(rc_matrix[m].c != m_cols && preserve_flag)
@@ -56,7 +84,18 @@ void DimMatrix(int m, uint32_t m_rows, uint32_t m_cols, bool preserve_flag=false
}
rc_matrix[m].r = m_rows;
rc_matrix[m].c = m_cols;
rc_matrix[m].c = m_cols;
rc_matrix[m].active = true;
return m;
}
void DeleteMatrix(int mA)
{
rc_matrix[mA].data.clear();
rc_matrix[mA].c = 0;
rc_matrix[mA].r = 0;
rc_matrix[mA].active = false;
}
//Adds Matrix A() to Matrix B(), answer is Matrix C()
@@ -503,11 +542,11 @@ bool GetMatrixRows (uint32_t mA, uint32_t mB, uint32_t r, uint32_t num_rows)
}
// Creates Identity Matrix A() of order N%
void IdentityMatrix(uint32_t mA, uint32_t n)
void setIdentityMatrix(uint32_t mA, uint32_t n)
{
DimMatrix(mA, n, n);
for(int i = 0; i < n; i++)
rc_matrix[mA].data[i*n+n] = 1;
rc_matrix[mA].data[i*(n+1)] = 1;
}
bool GaussianElimination(vector< vector<double> > &A, vector<double> &b, uint32_t mC) {
@@ -630,7 +669,7 @@ void getCofactor(uint32_t A_dim, double* A, double* temp, int p, int q,
}
}
bool CofactorMatrix(uint32_t mA, int p, int q, int n)
void CofactorMatrix(uint32_t mA, int p, int q, int n)
{
uint32_t m_size = rc_matrix[mA].c;
@@ -1184,6 +1223,136 @@ void JoinMatrixColumns(uint32_t mA, uint32_t mB, uint32_t mC)
SetMatrixValue(mC, rc_matrix[mA].r + r, c, mv);
}
}
}
void ClipMatrix(int mA, int r, int c, int num_rows, int num_cols, int mB)
{
int mA_rows = rc_matrix[mA].r;
int mA_cols = rc_matrix[mA].c;
int mB_rows = num_rows;
int mB_cols = num_cols;
if((r + num_rows) > mA_rows)
mB_rows = mA_rows - r;
if(mB_rows < 0)
{
DimMatrix(mB, mA_rows, mA_cols, false);
ClearMatrix(mB);
return;
}
if((c + num_cols) > mA_cols)
mB_cols = mA_cols - c;
if(mB_cols < 0)
{
DimMatrix(mB, mA_rows, mA_cols, false);
ClearMatrix(mB);
return;
}
DimMatrix(mB, mB_rows, mB_cols, false);
for(int row = r; row < (r+num_rows); row++)
for(int col = c; col < (c+num_cols); col++)
SetMatrixValue( mB, row-r, col-c, MatrixValue(mA, row, col));
}
int rc_convertFromIrrMatrix(irr::core::matrix4 irr_mat, int mB = -1)
{
int mA = DimMatrix(NEW_MATRIX, 4, 4);
if(mB < 0)
mB = DimMatrix(NEW_MATRIX, 4, 4);
else
DimMatrix(mB, 4, 4);
for(int i = 0; i < 4; i++)
{
rc_matrix[mA].data[i*4] = irr_mat[i*4];
rc_matrix[mA].data[i*4+1] = irr_mat[i*4+1];
rc_matrix[mA].data[i*4+2] = irr_mat[i*4+2];
rc_matrix[mA].data[i*4+3] = irr_mat[i*4+3];
}
TransposeMatrix(mA, mB);
DeleteMatrix(mA);
return mB;
}
irr::core::matrix4 rc_convertToIrrMatrix(int mA)
{
int mB = DimMatrix(NEW_MATRIX, 4, 4);
TransposeMatrix(mA, mB);
irr::core::matrix4 irr_mat;
for(int i = 0; i < 4; i++)
{
irr_mat[i*4] = rc_matrix[mB].data[i*4];
irr_mat[i*4+1] = rc_matrix[mB].data[i*4+1];
irr_mat[i*4+2] = rc_matrix[mB].data[i*4+2];
irr_mat[i*4+3] = rc_matrix[mB].data[i*4+3];
}
DeleteMatrix(mB);
return irr_mat;
}
void printRCMatrix(int m)
{
for(int i = 0; i < 4; i++)
std::cout << "[ " << rc_matrix[m].data[i*4] << ", " << rc_matrix[m].data[i*4+1] << ", " << rc_matrix[m].data[i*4+2] << ", " << rc_matrix[m].data[i*4+3] << " ]" << std::endl;
}
void rc_setMatrixTranslation(int mA, double x, double y, double z)
{
irr::core::matrix4 m = rc_convertToIrrMatrix(mA);
m.setTranslation(irr::core::vector3df(x, y, z));
rc_convertFromIrrMatrix(m, mA);
}
void rc_setMatrixRotation(int mA, double x, double y, double z)
{
irr::core::matrix4 m = rc_convertToIrrMatrix(mA);
m.setRotationDegrees(irr::core::vector3df(x, y, z));
rc_convertFromIrrMatrix(m, mA);
}
void rc_setMatrixScale(int mA, double x, double y, double z)
{
irr::core::matrix4 m = rc_convertToIrrMatrix(mA);
m.setScale(irr::core::vector3df(x, y, z));
rc_convertFromIrrMatrix(m, mA);
}
void rc_getMatrixTranslation(int mA, double* x, double* y, double* z)
{
irr::core::matrix4 m = rc_convertToIrrMatrix(mA);
*x = m.getTranslation().X;
*y = m.getTranslation().Y;
*z = m.getTranslation().Z;
}
void rc_getMatrixRotation(int mA, double* x, double* y, double* z)
{
irr::core::matrix4 m = rc_convertToIrrMatrix(mA);
*x = m.getRotationDegrees().X;
*y = m.getRotationDegrees().Y;
*z = m.getRotationDegrees().Z;
}
void rc_getMatrixScale(int mA, double* x, double* y, double* z)
{
irr::core::matrix4 m = rc_convertToIrrMatrix(mA);
*x = m.getScale().X;
*y = m.getScale().Y;
*z = m.getScale().Z;
}
#endif // RC_MATRIX_H_INCLUDED