首页 > 代码库 > UVA11437 - Triangle Fun
UVA11437 - Triangle Fun
就是给一个三角形,然后给出一些关系,以及一些点的坐标,最后求一个三角形面积就好了。
我的做法:
用向量的方法推出离线段一个端点最近的三等分点的表达式
用行列式解线性方程推出求两直线交点的表达式
用叉积求三角形面积
用小数点后第一位对整数部分进行四舍五入求得离这个实数最近的整数
我的代码如下:
#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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。