我可是要当火影的男人 2014-04-26 03:57 采纳率: 0%
浏览 777

C语言 输出结果不对(统计三角形区域内多少棵树问题)

果园里的数 xy坐标为1到99的整数,输入一个三角形的坐标 统计内部和边界有多少棵树 样例输入1.5 1.5 1.5 6.8 6.8 1.5 样例输出15
以下是通过有向面积编写的程序 哪里错了 为何输出30
#include
double area2(double x0,double y0,double x1,double y1,double x2,double y2)
{
return x0*y1+x1*y2+x2*y0-x2*y1-x0*y2-x1*y0;
}
int main()
{
double x0,x1,x2,y0,y1,y2,i,j;
int count=0;
scanf("%lf %lf %lf %lf %lf %lf",&x0,&y0,&x1,&y1,&x2,&y2);
for(i=1;i<100;i++)
for(j=1;j<100;j++)
{
if(area2(x0,y0,x1,y1,x2,y2)==(area2(i,j,x0,y0,x1,y1)+area2(i,j,x1,y1,x2,y2)+area2(i,j,x2,y2,x0,y0)))
count++;
}
printf("%d",count);
return 0;
}

  • 写回答

1条回答

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-03-09 12:21
    关注

    该回答引用ChatGPT

    该程序存在以下问题:

    • 代码中的算法使用了点是否在三角形内的判断方法,但使用的是浮点数计算,存在精度问题,可能会导致判断错误。
    • 程序使用了两层嵌套的循环来遍历整个坐标系,但这样的复杂度为 O(n^2),当数据规模很大时,程序的运行时间会非常长。
    • 对于每个坐标点,都会调用 area2 函数三次来计算点与三角形三个顶点所构成的三个三角形的面积,这会浪费计算资源。
    • 在判断点是否在三角形内的时候,对于点在三角形的边界上的情况没有特判,导致边界上的点没有被正确统计。

    修改建议:

    • 可以使用更为稳定和准确的方法来判断点是否在三角形内,例如射线法和叉积法等。其中,叉积法相对简单,可以通过判断点与三角形的三条边所构成的向量叉积是否同号来判断点是否在三角形内。
    • 为了避免使用两层嵌套循环,可以使用一个单层循环遍历整个坐标系,并在循环中判断每个点是否在三角形内。
    • 为了减少重复计算,可以将三角形的面积计算结果保存下来,在后续的判断中直接使用。
    • 需要特判边界上的点,可以将叉积结果为0的点(即点在三角形的某条边上)加入到统计结果中。
    评论

报告相同问题?

悬赏问题

  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 ubuntu系统下挂载磁盘上执行./提示权限不够
  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误