⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 geometry.cpp

📁 MONA是为数不多的C++语言编写的一个很小的操作系统
💻 CPP
字号:
/*

僐儊儞僩拞偺丄m,q,v偼
m = Matrix
q = Quaternion
v = Vector
傪堄枴偡傞丅

*/

/*
#include <stdio.h>
#include <math.h>
#include <float.h>
#include <string.h>
*/
#include <monapi.h>
using namespace MonAPI;

#include "geometry.h"


float atan2(float a,float b){
    return 0.0f; // 偰偒偲乕丅
}
float acos(float a){
    return 0.0f; // 偰偒偲乕丅
}

void memset(void *p,int val,int len){
    int i;
    for(i=0;i<len;i++){
        ((unsigned char *)p)[i] = val;
    }
}

Matrix::Matrix()
{
    memset(m,0,sizeof(float)*16);
    m[0][0] = 1.0f;
    m[1][1] = 1.0f;
    m[2][2] = 1.0f;
    m[3][3] = 1.0f;
}

Matrix::~Matrix()
{
}

void
Matrix::put()
{
	int i,t;
/*
	printf("{\n");
	for(t=0;t<4;t++)
	{
		printf("  ");
		for(i=0;i<4;i++)
		{
			printf("%11.6f,",m[t][i]);
		}
		printf("\n");
	}
	printf("}\n");*/
}

void
Matrix::SetXrotate(float r)
{
	memset(m,0,sizeof(float)*16);

	m[1][1] =   m[2][2] = (float)cos(r);
	m[2][1] = -(m[1][2] = (float)sin(r));
	m[0][0] =   m[3][3] = 1.0f;
}
void
Matrix::SetXrotate(float s,float c)
{
	memset(m,0,sizeof(float)*16);

	m[1][1] =   m[2][2] = (float)c;
	m[2][1] = -(m[1][2] = (float)s);
	m[0][0] =   m[3][3] = 1.0f;
}

void
Matrix::SetYrotate(float r)
{
	memset(m,0,sizeof(float)*16);

	m[0][0] =   m[2][2] = (float)cos(r);
	m[0][2] = -(m[2][0] = (float)sin(r));
	m[1][1] =   m[3][3] = 1.0f;
}
void
Matrix::SetYrotate(float s,float c)
{
	memset(m,0,sizeof(float)*16);

	m[0][0] =   m[2][2] = (float)c;
	m[0][2] = -(m[2][0] = (float)s);
	m[1][1] =   m[3][3] = 1.0f;
}

void
Matrix::SetZrotate(float r)
{
	memset(m,0,sizeof(float)*16);

	m[0][0] =   m[1][1] = (float)cos(r);
	m[1][0] = -(m[0][1] = (float)sin(r));
	m[2][2] =   m[3][3] = 1.0f;
}
void
Matrix::SetZrotate(float s,float c)
{
	memset(m,0,sizeof(float)*16);

	m[0][0] =   m[1][1] = (float)c;
	m[1][0] = -(m[0][1] = (float)s);
	m[2][2] =   m[3][3] = 1.0f;
}

void
Matrix::SetXrotateF(float r)
{
	m[1][1] =   m[2][2] = (float)cos(r);
	m[2][1] = -(m[1][2] = (float)sin(r));
}

void
Matrix::SetYrotateF(float r)
{
	m[0][0] =   m[2][2] = (float)cos(r);
	m[0][2] = -(m[2][0] = (float)sin(r));
}

void
Matrix::SetZrotateF(float r)
{
	m[0][0] =   m[1][1] = (float)cos(r);
	m[1][0] = -(m[0][1] = (float)sin(r));
}

void
Matrix::SetMagnification(float src)
{
	memset(m,0,sizeof(float)*16);

	m[0][0] = m[1][1] = m[2][2] = (float)src;
	m[3][3] = 1;
}

void
Matrix::SetMagnification(float x,float y,float z)
{
	memset(m,0,sizeof(float)*16);

	m[0][0] = (float)x;
	m[1][1] = (float)y;
	m[2][2] = (float)z;
	m[3][3] = 1;
}

void
Matrix::SetMagnification(Vector &src)
{
	memset(m,0,sizeof(float)*16);

	m[0][0] = src.x;
	m[1][1] = src.y;
	m[2][2] = src.z;
	m[3][3] = 1;
}

// (0,0,1)偑丄(ix

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -