Area in Triangle

博客原文地址:http://blog.csdn.net/xuechelingxiao/article/details/40707691

题目大意:

给你一个三角形的三边边长,给你一跟绳子的长度,将绳子放在三角形里围起来的面积最大是多少。

解题思路:

当然能够想到当绳子的长度十分长的时候,绳子能围城的最大面积就是三角形的面积。

当然还能够想到的是当绳子的长度比較短,小于三角形的内接圆的长度时,绳子能围城的面积就是绳子能围成的圆的面积。

那么剩下要计算的就是当绳子长度小于三角形周长而且大于三角形内接圆的时候。

这样的情况下,显然会是如图所看到的的情况。

那么这样的情况下的面积怎么计算呢?

如图:

两个三角形是相似的,所以红色绳子所围成部分的面积就是大三角形的面积减去小三角形的的面积再加上小三角形内切圆的面积,也就是代码中

ans = S-S*t*t+Pi*rr*rr; 的意义。至于小三角形内切圆的半径。则是用小三角形与大三角形相似算出来的比例求得的。

我感觉说的挺具体的,具体的看代码吧。

#include <map>
#include <set>
#include <stack>
#include <queue>
#include <vector>
#include <cmath>
#include <stdio.h>
#include <stdlib.h>
#include <cstring>
#include <iostream>
#include <limits.h>
#include <algorithm>
#define LL long long
//#define LL long long
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define max3(a, b, c) (a>b?max(a, c):max(b, c))
#define min3(a, b, c) (a<b?min(a, c):min(b, c))
#define max4(a, b, c, d) max(max(a, b), max(c, d))
#define min4(a, b, c, d) min(min(a, b), min(c, d))
#define Read() freopen("data.in", "r", stdin);
#define Write() freopen("data.out", "w", stdout); const double Pi = acos(-1.0);;
const double Ee = 2.718281828459045235360;
const int INF = 0x3f3f3f3f;
const LL INFF = 0x3f3f3f3f3f3f3f3fLL;
const double eps = 1e-8;
const int MOD = 1000000009; const int dx4[] = {-1, 0, 1, 0};
const int dy4[] = { 0, 1, 0, -1};
const int dx8[] = {-1, 0, 1, 0, -1, -1, 1, 1};
const int dy8[] = {0 , 1, 0, -1, -1, 1, -1, 1};
const int dxhorse[] = {-2, -2, -1, -1, 1, 1, 2, 2};
const int dyhorse[] = {1 , -1, 2, -2, 2, -2, 1, -1}; using namespace std; struct Point {
double x, y;
} P[20010], m; int dcmp(double x) {
return x < -eps ? -1 : x > eps;
} int main()
{
double a, b, c, d;
int icase = 1;
while(~scanf("%lf%lf%lf%lf", &a, &b, &c, &d)) {
if(dcmp(a)==0 && dcmp(b)==0 && dcmp(c)==0 && dcmp(d)==0) {
break;
}
double L = a+b+c;
double cosA = (b*b+c*c-a*a)/(2*b*c);
double S = 0.5*b*c*(sqrt(1-cosA*cosA));
double r = S*2/L;
double ans;
if(d > L) {
ans = S;
}
else if(2*Pi*r >= d) {
ans = d*d/(4*Pi);
}
else {
double t = (L-d)/(L-2*Pi*r);
double rr = r*t;
ans = S-S*t*t+Pi*rr*rr;
}
printf("Case %d: %.2lf\n", icase++, ans);
} return 0;
} /*test case*/
/* */

POJ 1927 Area in Triangle(计算几何)的更多相关文章

  1. POJ 1927 Area in Triangle

    Area in Triangle Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 1674   Accepted: 821 D ...

  2. POJ 1927 Area in Triangle 题解

    link Description 给出三角形三边长,给出绳长,问绳在三角形内能围成的最大面积.保证绳长 \(\le\) 三角形周长. Solution 首先我们得知道,三角形的内切圆半径就是三角形面积 ...

  3. 2018.07.04 POJ 1654 Area(简单计算几何)

    Area Time Limit: 1000MS Memory Limit: 10000K Description You are going to compute the area of a spec ...

  4. hdu 1451 Area in Triangle(计算几何 三角形)

    Given a triangle field and a rope of a certain length (Figure-1), you are required to use the rope t ...

  5. poj 1654 Area 多边形面积

    /* poj 1654 Area 多边形面积 题目意思很简单,但是1000000的point开不了 */ #include<stdio.h> #include<math.h> ...

  6. poj 1265 Area 面积+多边形内点数

    Area Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 5861   Accepted: 2612 Description ...

  7. POJ 1265 Area POJ 2954 Triangle Pick定理

    Area Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 5227   Accepted: 2342 Description ...

  8. 2018.07.04 POJ 1265 Area(计算几何)

    Area Time Limit: 1000MS Memory Limit: 10000K Description Being well known for its highly innovative ...

  9. POJ 1654 Area 计算几何

    #include<stdio.h> #include<string.h> #include<iostream> #include<math.h> usi ...

随机推荐

  1. Oracle 10g R2 Transparent Data Encryption 透明数据加密

    Oracle 10g R2 Transparent Data Encryption 透明数据加密 本章介绍如何使用透明数据加密来保护Oracle数据库中的敏感数据,该功能使您可以加密数据库列并管理加密 ...

  2. docker-ce快速部署

    配置yum源wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repowget -O ...

  3. FreeMarker与SSH项目整合流程

    FreeMarker与SSH项目整合流程 学习了SSH之后,一般为了减少数据库的压力,会使用FreeMarker来生成静态HTML页面.下面简单说一下FreeMarker与SSH项目的整合全过程~ 前 ...

  4. Function()构造函数与函数直接量

    Function()构造函数与函数直接量 制作人:全心全意 在JavaScript中,除了可使用基本的function语句定义函数之外,还可以使用另外两种方式来定义,即使用Function()构造函数 ...

  5. Binlog详解

    一.介绍 binlog, 即二进制文件,他记录了MySQL所有数据的变更,并以二进制的形式存储在磁盘上 二.binlog模式 binlog有三种模式:ROW(行模式),   Statement(语句模 ...

  6. 【MySQL】性能优化之 Index Condition Pushdown

    一 概念介绍    Index Condition Pushdown (ICP)是MySQL 5.6 版本中的新特性,是一种在存储引擎层使用索引过滤数据的一种优化方式.a 当关闭ICP时,index ...

  7. 如何使用werkzeug创建WSGI APP

    注意 : 1.定义__call__的意义 class App(): def __init__(self): pass def method(self): pass app=App() app() #错 ...

  8. 第八届河南省程序设计大赛-B.最大岛屿0000110011000000

    最大岛屿                                                                                           时间限制: ...

  9. hdu 2295 dlx重复覆盖+二分答案

    题目大意: 有一堆雷达工作站,安放至多k个人在这些工作站中,找到一个最小的雷达监控半径可以使k个工作人所在的雷达工作站覆盖所有城市 二分半径的答案,每次利用dlx的重复覆盖来判断这个答案是否正确 #i ...

  10. hdu 3879 最大权闭合图(裸题)

    /* 裸的最大权闭合图 解:参见胡波涛的<最小割模型在信息学竞赛中的应用 #include<stdio.h> #include<string.h> #include< ...