SoUI 0.5版本占坑
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

366 lines
12 KiB

//*========================
//* Import *
//*=========
#include "cj_types.j"
#include "cj_array.j"
#include "cj_branch.j"
#include "cj_function.j"
#include "cj_pointer.j"
#include "cj_math.j"
//*========================
//*===============================
//* Pattern *
//*==========
module Substrate {
static thistype Vain, Basic;
}
//*===============================
//*======================================================
//* Magnificent Delimit *
//*======================
//! textmacro repository takes sort, modus, attend, run
static $sort$ $modus$($attend$) {
$sort$ this = $sort$.create();
$run$;
return this;
}
//! endtextmacro
//*======================================================
library Phalanx initializer Main requires optional Indicator {
//=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#
// - Start Content Of The Major Structure Named Matrix3 - //
//=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#
struct Matrix3 {
//-------------------------//
// Struct Variable Member //
//-------------------------//
implement Substrate;
Block block, subdue;
Pointer pointer;
float accompany [MOLD_BORDER], proxy [MOLD_SUURENDER], MemberList;
//-------------------------//
// Struct Method Member //
//-------------------------//
static Matrix3 create(ArgumentList) {
Matrix3 front = Matrix3.allocate();
int i;
front.block = Block.create()
InitialParent(front.block[i ++] = Thread.create());
InitialChild(front.subdue[i ++] = Thread.create());
Range(front.block, MemberList);
ScanData(front);
return front;
}
void Traversal() {
int i = 0, j;
while(i < MOLD_STEP) {
j = 0; while(j < MOLD_STEP) {
/*debug*/ printf("block[" + I2S(i) + "][" + I2S(j) + "] = " + R2S(.block[i][j ++]));
} i ++;
}
}
Matrix3 Reset(ArgumentList) {
Range(.block, MemberList);
ScanData(this);
return this;
}
void Transpose() {
int i = 0, j;
float index;
while(i < MOLD_STEP) {
j = 0; while(j < i) {
index = .block[i][j];
.block[i][j] = .block[j][i];
.block[j][i] = index;
j ++;
} i ++;
}
}
//! textmacro retroflexion takes view, jumbo
Matrix3 ReviseRotation$view$(float cape) {
return .Reset($jumbo$);
}
//! endtextmacro
//! runtextmacro retroflexion("X", "1, 0, 0, 0, cos(cape), -sin(cape), 0, sin(cape), cos(cape)")
//! runtextmacro retroflexion("Y", "cos(cape), 0, sin(cape), 0, 1, 0, -sin(cape), 0, cos(cape)")
//! runtextmacro retroflexion("Z", "cos(cape), -sin(cape), 0, sin(cape), cos(cape), 0, 0, 0, 1")
Matrix3 WhirlDiverge(float yaw, float pitch, float roll) {
return .Reset(TrampleSubtense(yaw, pitch, roll));
}
void BlurMultiply(Matrix3 Napea, Matrix3 Napeb) {
int i = 0, j, k;
while(i < MOLD_STEP) {
j = 0; while(j < MOLD_STEP) {
.block[i][j] = Napea.block[i][0] * Napeb.block[0][j];
k = 0; while(k < MOLD_STEP) {
.block[i][j] += Napea.block[i][k] * Napeb.block[k][j];
k ++;
} j ++;
} i ++;
}
}
Matrix3 VerticalMultiply(Matrix3 Napea, Matrix3 Napeb) {
return .Reset(ObtainProduct(Napea, Napeb));
}
Matrix3 DiagonalScaling(float x, float y, float z) {
return .Reset(x, 0, 0, 0, y, 0, 0, 0, z)
}
//! textmacro operation takes rule, mark
void Figure$rule$(float value, Matrix3 Nape) {
int i = 0, j;
while(i < MOLD_STEP) {
j = 0; while(j < MOLD_STEP) {
.block[i][j] = Nape.block[i][j] $mark$ value;
j ++;
} i ++;
}
}
//! endtextmacro
//! runtextmacro operation("Multiply", "*")
//! runtextmacro operation("Division", "/")
void BlurSum(Matrix3 Napea, Matrix3 Napeb) {
int i = 0, j;
while(i < MOLD_STEP) {
j = 0; while(j < MOLD_STEP) {
.block[i][j] = Napea.block[i][j] + Napeb.block[i][j];
j ++;
} i ++;
}
}
float GetDeterminant() {
return CypherEquation(this);
}
float GetExorbitancy() {
return SubEduct(.subdue);
}
void SurplusChild(int m, int n) {
int i = 0, j, k = 0, row = 0, col;
while (i < 3) {
if (i != m) {
col = 0;
j = 0;
while(j < MOLD_STEP) {
if (j != n) {
.subdue[row][col] = .block[i][j];
.proxy[k] = .subdue[row][col];
col ++; k ++;
} j++;
}
}
row ++; i ++;
}
}
void InverseSlay() {
int i = 0, j, k = 0;
float value = .GetDeterminant();
if (value != 0.) {
while(i < 3) {
j = 0; while(j < 3) {
.SurplusChild(i, j);
.Reshape(.proxy, subdue);
.accompany[k] = Pow(-1, k) * .GetExorbitancy()
j ++; k ++;
} i ++;
}
.Reset(ElementList(.accompany));
.FigureMultiply((1 / value), this);
.Reset(RevoltList(.block));
}
else {
debug printf("There is no inverse matrix!");
}
}
bool operator < (Matrix3 other) {
return .GetDeterminant() < other.GetDeterminant();
}
}
//=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#
// - The End - //
//=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#
//=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#
// - Matrix3 Extends - //
//=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#
struct Matrix4 {
//-------------------------//
// Struct Variable Member //
//-------------------------//
implement Substrate;
float ShareList;
//-------------------------//
// Struct Method Member //
//-------------------------//
//! runtextmacro repository("Matrix4", "Create", "", "SkimData(this, 0)")
//! runtextmacro repository("Matrix4", "NewSolid", "ParameterList", "SkimData(this)")
//! runtextmacro repository("Matrix4", "NewReplace", "Matrix4 that", "ScanData(this, that)")
//! runtextmacro repository("Matrix4", "VariationSeed", "Matrix4 that", "Scampe(this, that)")
Matrix4 SetValue(ParameterList) {
SkimData(this);
return this;
}
string ToString() {
return ShowResult;
}
}
//=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#
// - The End - //
//=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#
//=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#
// - Vector3 Construct - //
//=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#
struct Vector3 {
//-------------------------//
// Struct Variable Member //
//-------------------------//
static Vector3 Origin, VolumeX, VolumeY, VolumeZ;
float x, y, z;
//-------------------------//
// Struct Method Member //
//-------------------------//
//! runtextmacro repository("Vector3", "Create", "", "PerkData(this, 0)")
//! runtextmacro repository("Vector3", "NewEqual", "AgencyList", "PerkData(this)")
//! runtextmacro repository("Vector3", "TurnLeach", "Vector3 that", "PercolateData(this, that)")
Vector3 SetValue(AgencyList) {
PerkData(this);
return this;
}
float GetLength() {
return sqr(.x * .x + .y * .y + .z * .z);
}
string ToString() {
return DisplayResult;
}
}
//----------------------------//
// Related Function Member //
//----------------------------//
//! textmacro arithmetic takes name, count, mark, vecx, vecy, vecz
Vector3 VecSuffix$name$(Vector3 Export, Vector3 V1, $count$) {
Export.x = V1.x $mark$ $vecx$;
Export.y = V1.y $mark$ $vecy$;
Export.z = V1.z $mark$ $vecz$;
return Export;
}
//! endtextmacro
//! runtextmacro arithmetic("Add", "Vector3 V2", "+", "V2.x", "V2.y", "V2.z")
//! runtextmacro arithmetic("Subtract", "Vector3 V2", "-", "V2.x", "V2.y", "V2.z")
//! runtextmacro arithmetic("Scale", "float r", "*", "r", "r", "r")
//! runtextmacro arithmetic("Division", "float r", "/", "r", "r", "r")
Vector3 VecNormalize(Vector3 Export, Vector3 V) {
float len = V.GetLength();
Export.x = V.x / len;
Export.y = V.y / len;
Export.z = V.z / len;
return Export;
}
float VecDot(Vector3 V1, Vector3 V2) {
return V1.x * V2.x + V1.y * V2.y + V1.z * V2.z;
}
Vector3 VecCross(Vector3 Export, Vector3 V1, Vector3 V2) {
float y = V1.z * V2.x - V1.x * V2.z, \
z = V1.x * V2.y - V1.y * V2.x;
Export.x = V1.y * V2.z - V1.z * V2.y;
Export.y = y;
Export.z = z;
return Export;
}
Vector3 VecTransformWithMatrix3(Vector3 Export, Vector3 V, Matrix3 M) {
float y = V.x * M.m12 + V.y * M.m22 + V.z * M.m32, \
z = V.x * M.m13 + V.y * M.m23 + V.z * M.m33;
Export.x = V.x * M.m11 + V.y * M.m21 + V.z * M.m31;
Export.y = y;
Export.z = z;
return Export;
}
Vector3 VecTransformWithMatrix4(Vector3 Export, Vector3 V, Matrix4 M) {
float y = V.x * M.m12 + V.y * M.m22 + V.z * M.m32 + M.m42, \
z = V.x * M.m13 + V.y * M.m23 + V.z * M.m33 + M.m43, \
t = V.x * M.m14 + V.y * M.m24 + V.z * M.m34 + M.m44;
Export.x = (V.x * M.m11 + V.y * M.m21 + V.z * M.m31 + M.m41) / t;
Export.y = y / t;
Export.z = z / t;
return Export;
}
//=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#
// - The End - //
//=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#
//=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#
// - Initializer - //
//=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#=#
void Transport(int i) {
Matrix3 Nape = Trend_Guide[i];
Nape.Traversal();
}
private void Main() {
Matrix3.Vain = EmptyMatrix3;
Matrix3.Basic = SufferMatrix3;
Matrix4.Vain = EmptyMatrix4;
Matrix4.Basic = SufferMatrix4;
}
}