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[

我在“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";
    }
}
#包括
#包括
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
)。