C++ 关于在三角形中搜索点或从三角形中搜索点的程序
我在“dev-c++”中写了一个程序,讨论了一个问题。我们想知道它是在三角形中还是在三角形外。为什么我的程序不能正常工作?我该怎么办? 这是我的节目:C++ 关于在三角形中搜索点或从三角形中搜索点的程序,c++,geometry,dev-c++,C++,Geometry,Dev C++,我在“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[
#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";
}
}
#包括
#包括
int main()
{
int n,a,b,c,d;
int x[n];
int y[n];
n=1;
而(n>x[n];
标准: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]));
如果((b+c+d)!=a)
{
std::cout此程序的输入仅由整数坐标组成,但要检查点是否位于三角形内,此方法需要知道三角形的面积。三角形的面积为
A = width * height / 2
由于最后的除法,它可能返回一个浮点数。因此,中间变量a
,b
,c
,d
至少需要是浮点数
只要=
右侧的所有常量和变量都是整数,C也会将结果计算为整数。只有在最后一步,结果才会转换为目标类型。因此
double x = 2*3/4;
将使用整数计算为2*3/4
,结果为6/4
->1
,然后才转换为双值:1.000
。强制中间产物为float
类型可修复此问题:
double x = 2.0*3/4;
然后x=1.5
请注意,使用浮点数时,可能会遇到与最终比较相同的问题
if (b+c+d==a)
...
幸运的是,用2除法不会有问题。十进制值0.5
可以用float
和double
格式精确表示,只要“整体”部分不超过可用的位数。但是要记住这是一件好事。您似乎在用整数工作r-only空格。这是有意的吗?1/2
始终是0
(另外:Dev-C++是您的IDE,而不是您的编程语言。)谢谢。但是现在,我改了两行。正确的是:int n;double a,b,c,d;但它又不能正常工作!我该怎么办?一次调试一行!例如,我打赌你忘了将(1/2)
改为(1.0/2)
(或者简单地说,0.5
)。