1 #include <iostream>
2 #include <cmath>
3 #include <cstdlib>
4 #include <ctime>
5 using namespace std;
6
7 struct Tpoint{
8 double x, y, z;
9 };
10
11 inline double length(Tpoint A, Tpoint B){
12 double x = A.x - B.x, y = A.y - B.y, z = A.z - B.z;
13 return sqrt(x * x + y * y + z * z);
14 }
15
16 inline double across(Tpoint A, Tpoint B, Tpoint C){
17 Tpoint p1, p2;
18 p1.x = C.x - A.x; p1.y = C.y - A.y; p1.z = C.z - A.z;
19 p2.x = C.x - B.x; p2.y = C.y - B.y; p2.z = C.z - B.z;
20 double x = p1.y * p2.z - p1.z * p2.y;
21 double y = p1.z * p2.x - p1.x * p2.z;
22 double z = p1.x * p2.y - p1.y * p2.x;
23 //cout<<x<<' '<<y<<' '<<z<<endl;
24 return sqrt(x * x + y * y + z * z);
25 }
26
27 double distance(Tpoint A, Tpoint B, Tpoint C){
28 return abs(across(A,B,C))/length(B,C);
29 }
30
31 void neijieyuan(Tpoint A, Tpoint B, Tpoint C){
32 Tpoint cen;
33
34 srand(time(0));
35 A.x = (double)rand()/rand(); A.y = -(double)rand()/rand();
36 B.x = -(double)rand()/rand(); B.y = (double)rand()/rand();
37 C.x = -(double)rand()/rand(); C.y = (double)rand()/rand();
38 cout<<A.x<<' '<<A.y<<' '<<B.x<<' '<<B.y<<' '<<C.x<<' '<<C.y<<endl;
39 double a = length(B,C), b = length(C, A), c = length(A, B);
40 //cout<<a<<' '<<b<<' '<<c<<endl;
41 if(abs(across(A, B, C)) < 0.01) {cout<<"Wrong Input!"<<endl;return;}
42 cen.x = (a * A.x + b * B.x + c * C.x)/(a + b + c);
43 cen.y = (a * A.y + b * B.y + c * C.y)/(a + b + c);
44 cen.z = (a * A.z + b * B.z + c * C.z)/(a + b + c);
45 cout<<cen.x<<' '<<cen.y<<' '<<cen.z<<endl;
46 cout<<distance(cen, A, B)<<' '<<distance(cen, B, C)<<' '<<distance(cen, C, A)<<endl;
47 }
48
49 int main(){
50 Tpoint A, B, C;
51 while(true){
52 //cin>>A.x>>A.y>>A.z>>B.x>>B.y>>B.z>>C.x>>C.y>>C.z;
53 //cout<<across(A, B, C)<<endl;
54 neijieyuan(A, B, C);
55 //cout<<abs(across(A, B, C))/(a + b + c)<<endl;
56 system("pause");
57 }
58 }