POJ 1931 Biometrics G++计算几何点积 叉积没掌握

xiaoxiao2021-02-28  101

#include <iostream> #include <cstdio> #include <cmath> #include <algorithm> using namespace std; //英语 看博友分析 抄博友程序 计算几何 点积 叉积 没掌握 struct point{ double x,y; //构造函数没掌握 }; point vect[2][20]; double dis(point a, point b) { return sqrt(pow((a.x-b.x),2)+pow((a.y-b.y),2)); } double sina(point a,point b)//叉积求sina { point o={0,0}; return (a.x*b.y-a.y*b.x)/(dis(a,o)*dis(b,o)); } double cosa(point a,point b)//点积求cosa { point o={0,0}; return (a.x*b.x+a.y*b.y)/(dis(a,o)*dis(b,o)); } bool equ(double a,double b) { return fabs(a-b)<1e-10;//抄博友程序 科学计数法 } int main() { int n; while(1) { //cin>>n; scanf("%d",&n); if(n==0) { break; } for(int j=0;j<2;j++)//抄博友程序 输入向量 没掌握 { point origin; cin>>origin.x>>origin.y; for(int i=0;i<n-1;i++) { point tmp,tmp1; cin>>tmp.x>>tmp.y; tmp1=tmp; tmp.x-=origin.x; tmp.y-=origin.y; vect[j][i]=tmp; origin.x=tmp1.x; origin.y=tmp1.y; } } int jg=0; double sint=sina(vect[0][0],vect[1][0]);//抄博友分析 判断旋转 没掌握 double cost=cosa(vect[0][0],vect[1][0]); for(int i=1;i<n-1;i++) { double st=sina(vect[0][i],vect[1][i]); double ct=cosa(vect[0][i],vect[1][i]); if(!equ(sint,st)|| !equ(cost,ct))//抄博友程序 { jg=1; break; } } point o={0,0};//抄博友程序 没掌握 向量和0点的比 double ra=dis(vect[0][0],o)/dis(vect[1][0],o);//抄博友分析 判断伸缩 for(int i=1;i<n-1;i++) { double rt=dis(vect[0][i],o)/dis(vect[1][i],o); if(!equ(rt,ra)) { jg=1; break; } } if(jg==0) { cout << "similar" << endl; }else { cout << "dissimilar" << endl; } } return 0; }

 

转载请注明原文地址: https://www.6miu.com/read-55397.html

最新回复(0)