bnuoj 4209 Triangle(计算几何)

http://www.bnuoj.com/bnuoj/problem_show.php?pid=4209

题意:如题

题解:公式直接计算,或者角平分线求交点

【code1】:

 1 #include <iostream>
 2 #include <math.h>
 3 #include <string.h>
 4 #include <stdlib.h>
 5 #include<stdio.h>
 6 
 7 using namespace std;
 8 //定义点
 9 struct point
10 {
11     double x,y;
12 };
13 
14 typedef struct point point;
15 
16 
17 double fabs(double x)
18 {
19     return x<0?-x:x;
20 }
21 //定义直线
22 struct line
23 {
24     point a,b;
25 };
26 typedef struct line line;
27 
28 //两点距离
29 double distance(point p1,point p2)
30 {
31     return sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));
32 }
33 //两直线求交点
34 point intersection(line u,line v)
35 {
36     point ret=u.a;
37     double t=((u.a.x-v.a.x)*(v.a.y-v.b.y)-(u.a.y-v.a.y)*(v.a.x-v.b.x))
38     /((u.a.x-u.b.x)*(v.a.y-v.b.y)-(u.a.y-u.b.y)*(v.a.x-v.b.x));
39     ret.x+=(u.b.x-u.a.x)*t;
40     ret.y+=(u.b.y-u.a.y)*t;
41     return ret;
42 }
43 
44 point incenter(point a,point b,point c)
45 {
46     line u,v;
47     double m,n;
48     u.a=a;
49     m=atan2(b.y-a.y,b.x-a.x);
50     n=atan2(c.y-a.y,c.x-a.x);
51     u.b.x=u.a.x+cos((m+n)/2);
52     u.b.y=u.a.y+sin((m+n)/2);
53     v.a=b;
54     m=atan2(a.y-b.y,a.x-b.x);
55     n=atan2(c.y-b.y,c.x-b.x);
56     v.b.x=v.a.x+cos((m+n)/2);
57     v.b.y=v.a.y+sin((m+n)/2);
58     return intersection(u,v);
59 }
60 
61 int main()
62 {
63     point a,b,c;
64     scanf("%lf%lf",&a.x,&a.y);
65     scanf("%lf%lf",&b.x,&b.y);
66     scanf("%lf%lf",&c.x,&c.y);
67     point d;
68     d = incenter(a,b,c);
69     if(fabs(d.x)<1e-6) d.x=0;
70     if(fabs(d.y)<1e-6) d.y=0;
71     printf("%.2lf %.2lf\n",d.x,d.y);
72     return 0;
73 }

【code2】:

 

 1 #include <iostream>
 2 #include <math.h>
 3 #include <string.h>
 4 #include <stdlib.h>
 5 #include<stdio.h>
 6 
 7 //using namespace std;
 8 //定义点
 9 struct point
10 {
11     double x,y;
12 };
13 
14 double distance(point p1,point p2)
15 {
16     return sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));
17 }
18 
19 int main()
20 {
21     point a,b,c;
22     scanf("%lf%lf",&a.x,&a.y);
23     scanf("%lf%lf",&b.x,&b.y);
24     scanf("%lf%lf",&c.x,&c.y);
25     point d;
26     double ab = distance(a,b);
27     double bc = distance(b,c);
28     double ac = distance(a,c);
29     d.x = (a.x*bc+b.x*ac+c.x*ab)/(ab+bc+ac);
30     d.y = (a.y*bc+b.y*ac+c.y*ab)/(ab+bc+ac);
31     printf("%.2lf %.2lf\n",d.x,d.y);
32     return 0;
33 }

 

posted @ 2013-10-10 19:12  crazy_apple  阅读(204)  评论(0编辑  收藏  举报