码迷,mamicode.com
首页 > 其他好文 > 详细

UVA11437 - Triangle Fun

时间:2014-09-06 12:31:13      阅读:228      评论:0      收藏:0      [点我收藏+]

标签:os   io   ar   sp   代码   c   ios   bs   as   

就是给一个三角形,然后给出一些关系,以及一些点的坐标,最后求一个三角形面积就好了。


我的做法:

用向量的方法推出离线段一个端点最近的三等分点的表达式

用行列式解线性方程推出求两直线交点的表达式

用叉积求三角形面积

用小数点后第一位对整数部分进行四舍五入求得离这个实数最近的整数


我的代码如下:


#include<iostream>
#include<map>
#include<string>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<queue>
#include<vector>
#include<algorithm>
using namespace std;
struct Dot
{
	double x,y;
	Dot(){}
	Dot(double a,double b){x=a,y=b;}
};
Dot operator - (Dot a,Dot b){return Dot(b.x-a.x,b.y-a.y);}
double operator * (Dot a,Dot b){return a.x*b.y-b.x*a.y;}
double area(Dot a,Dot b,Dot c){return fabs((b-a)*(c-a));}
Dot cross(Dot a,Dot b,Dot c,Dot d)
{
	double e,f,g,h,i,j,k,l,m;
	e=b.y-a.y;f=a.x-b.x;g=a.x*b.y-a.y*b.x;
	h=d.y-c.y;i=c.x-d.x;j=c.x*d.y-c.y*d.x;
	k=Dot(e,h)*Dot(f,i);
	l=Dot(g,j)*Dot(f,i);
	m=Dot(e,h)*Dot(g,j);
	return Dot(l/k,m/k);
}
Dot d3(Dot a,Dot b){return Dot((2*a.x+b.x)/3,(2*a.y+b.y)/3);}
int main()
{
	int n,ans;
	Dot a,b,c,d,e,f,p,q,r;
	cin>>n;
	while(n--)
	{
		cin>>a.x>>a.y>>b.x>>b.y>>c.x>>c.y;
		d=d3(b,c);
		e=d3(c,a);
		f=d3(a,b);
		p=cross(b,e,d,a);
		q=cross(b,e,c,f);
		r=cross(d,a,c,f);
		ans=0.5+area(p,q,r)/2;
		printf("%d\n",ans);
	}
}


UVA11437 - Triangle Fun

标签:os   io   ar   sp   代码   c   ios   bs   as   

原文地址:http://blog.csdn.net/stl112514/article/details/39099499

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!