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

📄 translatescale.c

📁 完整的3D 模型检索程序
💻 C
字号:
#include <stdio.h>
#include <malloc.h>
#include <memory.h>
#include <math.h>
#include <float.h>

#include "ds.h"
#include "RWObj.h"

double max(double a, double b, double c)
{
	double d = (a>b)?a:b;
	return (c>d)?c:d;
}

void TranslateScale(pVer vertex, int NumVer, pTri triangle, int NumTri, char *fn, pVer T, double *S)
{
	Ver				Translate;	
	double			scale, dtmp;
//	FILE			*fpt;
//	char			filename[100];
	int				i, j, k;
	Ver				MinCoor, MaxCoor;

	// if vertices didn't use in any face, don't include it

	// get minimum and maximum coornidate from 3D model
	for(k=0; k<3; k++)
	{
		MinCoor.coor[k] = DBL_MAX;
		MaxCoor.coor[k] = -DBL_MAX;
	}
	for(i=0; i<NumTri; i++)
		for(j=0; j<triangle[i].NodeName; j++)
			for(k=0; k<3; k++)
			{
				dtmp = vertex[triangle[i].v[j]].coor[k];
				if( dtmp < MinCoor.coor[k] )
					MinCoor.coor[k] = dtmp;
				if( dtmp > MaxCoor.coor[k] )
					MaxCoor.coor[k] = dtmp;
			}		

	// get the translate and scale
	Translate.coor[0] = -( MinCoor.coor[0] + MaxCoor.coor[0] ) / 2;
	Translate.coor[1] = -( MinCoor.coor[1] + MaxCoor.coor[1] ) / 2;
	Translate.coor[2] = -( MinCoor.coor[2] + MaxCoor.coor[2] ) / 2;
	scale = 1.0 / max(	MaxCoor.coor[0]-MinCoor.coor[0], 
						MaxCoor.coor[1]-MinCoor.coor[1], 
						MaxCoor.coor[2]-MinCoor.coor[2]);

/*	// save the center and scale paramater
	sprintf(filename, "%s_TS.txt", fn);
	fpt = fopen(filename, "w");
	fprintf(fpt, "%f %f %f\n%.12f\n", Translate.coor[0], Translate.coor[1], Translate.coor[2], scale);
	fclose(fpt);
*/

	// translate and scale 3D model
	for(i=0; i<NumVer; i++)
		for(j=0; j<3; j++)
		{
			vertex[i].coor[j] += Translate.coor[j];
			vertex[i].coor[j] *= scale;
		}

	// return results
	T->coor[0] = Translate.coor[0];
	T->coor[1] = Translate.coor[1];
	T->coor[2] = Translate.coor[2];
	*S = scale;

//	sprintf(filename, "%s_ts.obj", srcfn);
//	SaveObj(filename, vertex, triangle, NumVer, NumTri);
}

void Translate(pVer vertex, int NumVer, Ver Translate)
{
	int			i, j;

	for(i=0; i<NumVer; i++)
		for(j=0; j<3; j++)
			vertex[i].coor[j] += Translate.coor[j];
}

void Scale(pVer vertex, int NumVer, double scale)
{
	int			i, j;

	for(i=0; i<NumVer; i++)
		for(j=0; j<3; j++)
			vertex[i].coor[j] *= scale;
}

⌨️ 快捷键说明

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