我在" dev-c ++"中编写了一个程序。关于讨论一个问题。我们想要知道它是在三角形内或外面。为什么我的程序无法正常工作?我该怎么办? 这是我的计划:
#include <iostream>
#include <math.h>
int main()
{
int n,a,b,c,d;
int x[n];
int y[n];
n=1;
while (n<=4)
{
std:: cin >> x[n];
std:: cin >> y[n];
n=n+1;
}
a= fabs((1/2)*((x[1]*(y[2]-y[3]))+(x[2]*(y[3]-y[1]))+(x[3]*(y[1]-y[2]))));
b= fabs((1/2)*((x[1]*(y[2]-y[4]))+(x[2]*(y[4]-y[1]))+(x[4]*(y[1]-y[2]))));
c= fabs((1/2)*((x[1]*(y[3]-y[4]))+(x[3]*(y[4]-y[1]))+(x[4]*(y[1]-y[3]))));
d= fabs((1/2)*((x[2]*(y[3]-y[4]))+(x[3]*(y[4]-y[2]))+(x[4]*(y[2]-y[3]))));
if ((b+c+d)!= a)
{
std:: cout<< "out of triangle\n";
}
if (b+c+d==a)
{
std:: cout <<"in triangle\n";
}
}
答案 0 :(得分:1)
此程序的输入仅包含整数坐标,但要检查点是否位于三角形内,此方法需要知道三角形的区域。三角形的区域是
A = width * height / 2
并且由于最终除法,它可能返回浮点数。因此,中间变量a
,b
,c
,d
必须至少为float
。
只要=
右侧的所有常量和变量都是整数,C也会将结果计算为整数。只有在最后一步,结果才会转换为目标类型。因此,
double x = 2*3/4;
将使用整数计算为2*3/4
并生成6/4
- &gt; 1
,只有然后转换为双倍值:1.000
。强制中间体为float
类型会修复它:
double x = 2.0*3/4;
然后x = 1.5
。
请注意,使用浮点数时,您可能会遇到accuracy problems并进行最终比较
if (b+c+d==a)
...
幸运的是,这对你的分区来说不会有问题2.小数值0.5
可以用float
和double
格式完全表示,只要&#39 ;全&#39;部分不超过可用数字的数量。但是,记住它是一件好事。