首页 > 其他 > 详细

三角形的内切圆和外接圆--【英雄会】

时间:2014-02-19 17:14:39      阅读:321      评论:0      收藏:0      [点我收藏+]

这个题目有一段时间了,不过当时正在准备考试,纵使有心刷题,奈何佛脚得抱,后来又被撤了,所以拖至今天...

如题:一个三角形必然存在它的内切圆外接圆,求他们的面积比。

考虑到精度问题,我们输出面积比*1000的整数部分(直接下取整)。 

输入数据是一个三角形的三个顶点,但这三个顶点在三维空间中,所以输入是9个整数,分别表示三个顶点(x1,y1,z1) (x2,y2,z2) (x3,y3,z3),保证三点不共线,每个整数在-1000,+1000范围内。 

输出内接圆与外切圆的面积比*1000的整数部分。 

题目我就不说了,有点小问题,当时在群里面争论得还挺厉害的...如最后的输出:内接圆与外切圆的面积比*1000的整数部分。

咱们就当是出题人的不小心所致,即输出内切圆和外接圆的面积比*1000

说到底,这是一题水题,内切圆与外接圆,这是在考数学吗?

下面说公式,这是群里面当时别人贴出的,借鉴了,一般人我不告诉他...开句玩笑,这个随便就百度了,抑或是查数学书了;

内切圆半径:r=2 * S / (a + b + c),其中S是三角形面积,a、b、c是三角形三边。
外接圆半径:R=a * b * c / (4 * S),公式不多证明...

其中S的计算面积就不用多说了吧,S=√[p(p - a)(p - b)(p - c)],其中p = (a + b + c) / 2

至此,告一段落了...

#include <stdio.h>
#include <iostream>
#include <cmath>
#include <string>
using namespace std;
class Test {
public:
    static int ratio (int   x1,int   y1,int   z1,
                      int   x2,int   y2,int   z2,
                      int   x3,int   y3,int   z3)
    {
    //内切圆半径:r=2 * S / (a + b + c),其中S是三角形面积,a、b、c是三角形三边。
    //外接圆半径:R=a * b * c / (4 * S);
    float c = sqrtf((x1 - x2)*(x1 - x2) + (y1 - y2)*(y1 - y2) + (z1 - z2)*(z1 - z2));
    float a = sqrtf((x3 - x2)*(x3 - x2) + (y3 - y2)*(y3 - y2) + (z3 - z2)*(z3 - z2));
    float b = sqrtf((x1 - x3)*(x1 - x3) + (y1 - y3)*(y1 - y3) + (z1 - z3)*(z1 - z3));

    if(a + b <= c || b + c <= a || c + a <= b)
        return 0;

    float p = (a + b + c) / 2;  //
    float s = sqrtf(p * (p - a) * (p - b) * (p - c));  //三角形面积

    float r = 2 * s / (a + b + c);  //内切圆半径
    float R = a * b * c / (4 * s);  //外接圆半径

    return (int)(1000 * r * r / R / R);  //面积比πr2
    }
};
//start 提示:自动阅卷起始唯一标识,请勿删除或增加。
int main()
{
    cout<<Test::ratio(0,0,0,0,1,0,0,0,1)<<endl;
}
//end //提示:自动阅卷结束唯一标识,请勿删除或增加。

*∩_∩*

三角形的内切圆和外接圆--【英雄会】

原文:http://blog.csdn.net/xjm199/article/details/19432743

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!