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

📄 recovaffine.c

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

extern char srcfn[];
extern char destfn[];

double RecoverAffine(double **matrix, double cost[ANGLE][ANGLE][CAMNUM_2][CAMNUM_2], int *MinSrcCam)
{
	double		err, MinErr;
	int			align[60][20], i, j, k, angle, index, srcCam;
	FILE		*fpt;
	char		filename[100];
	pVer		VerRot;
	pTri		TriRot;
	int			NumVerRot, NumTriRot;
	vector		e1[2], e2[2];	// coordinate of edge

	// read align sequence
	fpt = fopen("align20.txt", "r");
	for(i=0; i<60; i++)
		for(j=0; j<CAMNUM_2; j++)
			fscanf(fpt, "%d", &align[i][j]);
	fclose(fpt);

	// get the minimum error among those alignment
	MinErr = DBL_MAX;
	for(srcCam=0; srcCam<ANGLE; srcCam++)	// each src angle
		for(i=0; i<ANGLE; i++)					// each dest angle
			for(j=0; j<60; j++)					// each align
			{
				err = 0;
				for(k=0; k<CAMNUM_2; k++)		// each vertex
					err += cost[srcCam][i][k][align[j][k]];

				if( err < MinErr )
				{
					MinErr = err;
					*MinSrcCam = srcCam;
					angle = i;
					index = j;
				}
			}

	sprintf(filename, "12_%1d", *MinSrcCam);
	ReadObj(filename, &VerRot, &TriRot, &NumVerRot, &NumTriRot);
	e1[0].x = VerRot[0].coor[0];
	e1[0].y = VerRot[0].coor[1];
	e1[0].z = VerRot[0].coor[2];
	e1[1].x = VerRot[1].coor[0];
	e1[1].y = VerRot[1].coor[1];
	e1[1].z = VerRot[1].coor[2];
	free(VerRot);
	free(TriRot);

	sprintf(filename, "12_%1d", angle);
	ReadObj(filename, &VerRot, &TriRot, &NumVerRot, &NumTriRot);
	e2[0].x = VerRot[align[index][0]].coor[0];
	e2[0].y = VerRot[align[index][0]].coor[1];
	e2[0].z = VerRot[align[index][0]].coor[2];
	e2[1].x = VerRot[align[index][1]].coor[0];
	e2[1].y = VerRot[align[index][1]].coor[1];
	e2[1].z = VerRot[align[index][1]].coor[2];
	free(VerRot);
	free(TriRot);

	RotateMatrix(matrix, e1, e2);

	// write the matrix to disk
	fpt=fopen("result.txt", "a");
	fprintf(fpt, "\n%s to %s\n", destfn, srcfn);
	fprintf(fpt, "SrcAngle = %d; DestAngle = %d; index = %d; err= %f\n", *MinSrcCam, angle, index, MinErr);
//	for(i=0; i<4; i++)
//	{
//		for(j=0; j<4; j++)
//			fprintf(fpt, "%lf ", matrix[i][j]);
//		fprintf(fpt, "\n");
//	}
	fclose(fpt);

	// return use which camera 
	return MinErr;
}

⌨️ 快捷键说明

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