coneneko.math



class MathError: object.Error;


struct Vector;
float x, y, z, w、Matrixにかける場合はw値に注意

float x;


float y;


float z;


float w;


alias r;


alias g;


alias b;


alias a;


static Vector create();


static Vector create(float x, float y);


static Vector create(float x, float y, float z);


static Vector create(float x, float y, float z, float w);


Vector opNeg();
-

bool opEquals(Vector f);
==

Vector opAdd(Vector f);
+

Vector opSub(Vector f);
-

Vector opMul(float f);
*

Vector opDiv(float f);
/

void opAddAssign(Vector f);
+=

void opSubAssign(Vector f);
-=

void opMulAssign(float f);
*=

void opDivAssign(float f);
/=

Vector opMul(Matrix m);
void opMulAssign(Matrix m);
wの値に注意、設定、除算、初期化

char[] toString();


void print();


alias vector;


Vector mulW(Vector a, Matrix b);
a.w=1として計算、除算、result.w=0で返す

float scalar(Vector a);


float distance(Vector a, Vector b);
二点間の距離(差の長さ)

Vector normalize(Vector a);
正規化

float dot(Vector a, Vector b);
内積( length(a) * length(b) * cos(ab) )

float cross2(Vector a, Vector b);
外積( length(a) * length(b) * sin(ab) )、二次元のは例外的に

Vector cross(Vector a, Vector b);
vec3

Vector cross(Vector a, Vector b, Vector c);
vec4, 外積( 体積 )

Matrix matrix(float[] a...);


struct Matrix;
Direct3Dの方に合わせている、そのうちOpenGLに合わせる

float[4u][4u] m;
左上から[行][列]
 00 01 02 03
 10 11 12 13
 20 21 22 23
 30 31 32 33


Matrix opMul(Matrix m2);
*

void opMulAssign(Matrix m2);
*=

static Matrix identity();


static Matrix zero();


static Matrix translation(float x, float y, float z);


static Matrix translation(Vector a);


static Matrix scaling(float sx, float sy, float sz);


static Matrix rotationX(float radian);


static Matrix rotationY(float radian);


static Matrix rotationZ(float radian);


static Matrix lookAtLH(float px, float py, float pz, float ax, float ay, float az, float ux, float uy, float uz);


static Matrix lookAtLH(Vector p, Vector a, Vector u);


static Matrix lookAtRH(Vector position, Vector at, Vector up = create(0F,1F,0F));


static Matrix lookAtRH(float px, float py, float pz, float ax, float ay, float az, float ux = 0F, float uy = 1F, float uz = 0F);


alias lookAt;


static Matrix perspectiveFovLH(float fieldOfViewY, float aspectRatio, float nearPlaneZ, float farPlaneZ);
directxのを持ってきたのでz[0, 1]のまま、注意、TODO 混乱するので削除?

static Matrix perspectiveFovRH(float fieldOfViewY = cast(float)(0x1.921fb54442d1846ap+1L / 8L), float aspectRatio = cast(float)(640 / 480), float nearPlaneZ = 1F, float farPlaneZ = 1000F);
opengl仕様 z[-1.0, 1.0]

alias perspectiveFov;


static Matrix ortho(float left = cast(float)-1, float right = 1F, float bottom = cast(float)-1, float top = 1F, float zNear = cast(float)-1, float zFar = 1F);


char[] toString();


void print();


static Matrix opCall(char[] a);


static Matrix opCall(float[] a);


void opIndexAssign(float value, uint x, uint y);


static Matrix modelLookAt(Vector position, Vector at);
モデルデータ用、upは(0, 1, 0)

float[] toFloatArray(char[] a);


Matrix inverse(Matrix m);


Matrix createMatrixFromQuaternion(Vector quaternion);


Vector createSlerpQuaternion(Vector quaternion0, Vector quaternion1, float t);


bool triangleIntersectRay(Vector t0, Vector t1, Vector t2, Vector rayPosition, Vector rayDirection);


float distanceOfTriangleAndRay(Vector t0, Vector t1, Vector t2, Vector rayPosition, Vector rayDirection);


bool triangleIntersectRay2(Vector t0, Vector t1, Vector t2, Vector rayPosition, Vector rayDirection, ref float distance);


float distanceOfPointAndLine(Vector p, Vector l0, Vector l1);


float distanceOfPointAndLineSegment(Vector p, Vector ls0, Vector ls1);


Vector lineSegmentToPoint(Vector ls0, Vector ls1, Vector p);


float toDegree(float radian);


float toRadian(float degree);


Vector clampVector(Vector a, float min, float max);


bool nearly(float a, float b);
ほぼ等しい

bool nearly(Vector a, Vector b);
ほぼ等しい

float lerp(float left, float right, float interpolater);


Vector lerp(Vector left, Vector right, float interpolater);


Vector[] lerp(Vector[] left, Vector[] right, float interpolater);


bool isInnerPoint(Matrix m, float x, float y);
基本ビルボード (0.5, 0.5) (0.5, -0.5) (-0.5, -0.5) (-0.5, 0.5) 内部の点であるかどうか

bool innerArea(Vector[] areaTriangles, Vector point);
六方向にrayを飛ばして全て衝突しているなら

class AnyRoute(T);
A-B-C... span(最初から最後までの所要時間)を設定して、任意のtから [A, B

A-Bの位置[0.0, 1.0 [B, C
B-Cの位置[0.0, 1.0
を取り出せる ) )
)
class MotionKeysRoute: coneneko.math.AnyRoute!(MotionKeys).AnyRoute;
隣り合うnodeのkeyFrameの差をrangeとして扱う

)
Page generated by Ddoc.