POJ 1931
来源:互联网 发布:程序员能做到多少岁 编辑:程序博客网 时间:2024/06/05 23:46
题意:生物面部特征识别,开始先输入特征数(坐标数),然后输入相应特征的坐标,输入两组(代表两张脸),判断这两张脸是否相似。
思路:建立链表筛选重点,并且删去多于的重点只留一个;然后用X乘的方法判断图形方向(点与点之间的位置关系,是否能通过旋转、平移、放缩重合),再用点乘的方法判断钝角锐角(主要是区分0度与180度),最后用边比边的方法判定是否相似。
代码:
#include<iostream>
#include<cmath>
usingnamespace std;
structcoor
{
double x;
double y;
coor *before;
coor *next;
};
intmain()
{
int n;
coor *head1,*head2,*p1,*p2;
while(cin>>n,n)
{
head1=head2=NULL;
for(int i=0;i<n;i++)
{
p1=new coor;
cin>>p1->x>>p1->y;
if(head1==NULL){head1=p1;p1->before=NULL;}
else
{
p2->next=p1;
p1->before=p2;
}
p2=p1;
}
p1->next=NULL;
for(int i=0;i<n;i++)
{
p1=new coor;
cin>>p1->x>>p1->y;
if(head2==NULL){head2=p1;p1->before=NULL;}
else
{
p2->next=p1;
p1->before=p2;
}
p2=p1;
}
p1->next=NULL;
int flag=0;
for(coor *pp1=head1,*pp2=head2,*del1=NULL,*del2=NULL;pp1!=NULL&&pp2!=NULL;pp1=pp1->next,pp2=pp2->next)
{
for(p1=pp1->next,p2=pp2->next;p1!=NULL&&p2!=NULL;p1=p1->next,p2=p2->next)
{
if(del1!=NULL)
{
delete del1;
delete
#include<cmath>
using
struct
{
};
int
{