算法入门经典——果园里的树

果园里的树排列成矩阵。他们的x和y坐标军事1-99的整数。输入若干个三角形,一次统计每一个三角形内部和边界上共有多少颗树。
输入样例:
1.5 1.5    1.5 6.8    6.8 1.5
10.7 6.9   8.5 1.5    14.5 1.5
输出样例:
15
17

解这道题的时候用的是三角形的三个顶点与在三角形内部的任意一点相连形成的三个三角形的面积等于原三角形的面积,而外部点形成的三角形面积大于原三角形的面积;还有一个点就是三个点的行列式等于三角形有向面积的两倍。

代码如下:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>

using namespace std;

class Angle
{
public:
    double x0, y0;
    double x1, y1;
    double x2, y2;
    friend istream & operator>>(istream & is, Angle &c);
};

istream & operator >>(istream & is, Angle &c)
{
    is >> c.x0 >> c.y0 >> c.x1 >> c.y1 >> c.x2 >> c.y2;
    return is;
}

double area(double x0,double y0,double x1,double y1,double x2,double y2)
{
    return abs(x0*y1 + x2*y0 + x1*y2 - x2*y1 - x0*y2 - x1*y0);
}

int a[100][100];

int main()
{
    Angle T;
    memset(a, 0, sizeof(a));
    int i, j;
    while (cin >> T)
    {
        int count = 0;
        for (i = 0; i < 100; i++)
        {
            for (j = 0; j < 100; j++)
            {
                if (fabs(area(T.x0, T.y0, T.x1, T.y1, T.x2, T.y2) - area(T.x0, T.y0, T.x1, T.y1, i, j) - area(T.x0, T.y0, T.x2, T.y2, i, j) - area(T.x1, T.y1, T.x2, T.y2, i, j)) <= 1e-9)
                    count++;
            }
        }
        cout << count << endl;
    }

    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值