鱼C论坛

 找回密码
 立即注册
查看: 984|回复: 4

[已解决]平面几何问题之三角形的整数点

[复制链接]
发表于 2020-11-28 17:02:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 乐乐学编程 于 2020-11-28 21:47 编辑

求在一个已知三个顶点的三角形内有多少个横坐标与纵坐标都是整数的点
最佳答案
2020-11-28 19:32:41
#include <stdio.h>
#include<math.h>

double S_tri(double ax, double ay, double bx, double by, double cx, double cy)
{
        double S;
        S = 0.5 * (ax * (by - cy) + bx * (cy - ay) + cx * (ay - by));
        if (S >= 0)
                return S;
        else
                return (-1.0 * S);
}


void main()

{
        int x, y, count = 0;
        double max1, min1, max2, min2;
        double S, S1, S2, S3, ax, ay, bx, by, cx, cy;
        scanf("%lf%lf%lf%lf%lf%lf", &ax, &ay, &bx, &by, &cx, &cy);
        S = S_tri(ax, ay, bx, by, cx, cy);
        max1 = ax;
        min1 = ax;
        if (max1 < bx)
                max1 = bx;
        if (max1 < cx)
                max1 = cx;
        if (min1 > bx)
                min1 = bx;
        if (min1 > cx)
                min1 = cx;
        max2 = ay;
        min2 = ay;
        if (max2 < by)
                max2 = by;
        if (max2 < cy)
                max2 = cy;
        if (min2 > by)
                min2 = by;
        if (min2 > cy)
                min2 = cy;

        for (x = min1;x <= max1;x++)
        {
                for (y = min2;y <= max2;y++)
                {
                        S1 = S_tri(x, y, bx, by, cx, cy);
                        S2 = S_tri(ax, ay, x, y, cx, cy);
                        S3 = S_tri(ax, ay, bx, by, x, y);
                        if (fabs(S - (S1 + S2 + S3)) < 0.000001)
                                count++;
                }
        }
        printf("在给定三点的三角形内有整数点 %d 个\n", count);
}

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-28 19:32:41 | 显示全部楼层    本楼为最佳答案   
#include <stdio.h>
#include<math.h>

double S_tri(double ax, double ay, double bx, double by, double cx, double cy)
{
        double S;
        S = 0.5 * (ax * (by - cy) + bx * (cy - ay) + cx * (ay - by));
        if (S >= 0)
                return S;
        else
                return (-1.0 * S);
}


void main()

{
        int x, y, count = 0;
        double max1, min1, max2, min2;
        double S, S1, S2, S3, ax, ay, bx, by, cx, cy;
        scanf("%lf%lf%lf%lf%lf%lf", &ax, &ay, &bx, &by, &cx, &cy);
        S = S_tri(ax, ay, bx, by, cx, cy);
        max1 = ax;
        min1 = ax;
        if (max1 < bx)
                max1 = bx;
        if (max1 < cx)
                max1 = cx;
        if (min1 > bx)
                min1 = bx;
        if (min1 > cx)
                min1 = cx;
        max2 = ay;
        min2 = ay;
        if (max2 < by)
                max2 = by;
        if (max2 < cy)
                max2 = cy;
        if (min2 > by)
                min2 = by;
        if (min2 > cy)
                min2 = cy;

        for (x = min1;x <= max1;x++)
        {
                for (y = min2;y <= max2;y++)
                {
                        S1 = S_tri(x, y, bx, by, cx, cy);
                        S2 = S_tri(ax, ay, x, y, cx, cy);
                        S3 = S_tri(ax, ay, bx, by, x, y);
                        if (fabs(S - (S1 + S2 + S3)) < 0.000001)
                                count++;
                }
        }
        printf("在给定三点的三角形内有整数点 %d 个\n", count);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-28 19:39:10 | 显示全部楼层
你的问题都具有挑战性,我回复你第一个问题,被审核了,此题目做完后,就没敢再发了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-28 21:46:36 | 显示全部楼层
风过无痕1989 发表于 2020-11-28 19:39
你的问题都具有挑战性,我回复你第一个问题,被审核了,此题目做完后,就没敢再发了

多谢了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-28 22:45:04 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 13:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表