2012-06-06 43 views
0
typedef struct { 
    double a; // coefficient for x 
    double b; // coefficient for y 
    double c; // constant term 
} line; 

points_to_line(point p1, point p2, line *l) 
{ 
    if (p1[X] == p2[X]) { 
     l->a = 1; 
     l->b = 0; 
     l->c = -p1[X]; 
} else { 
     l->b = 1; 
     l->a = -(p1[Y]-p2[Y])/(p1[X]-p2[X]); 
     l->c = -(l->a * p1[X]) - (l->b * p1[Y]); 
} 

我读通过编程(史蒂芬S. Skiena和Miguel雷维拉)挑战书,也许有人应该已经看过这本书。我期待几何代码,我不知道P1 [X]代码

p1 [X]是点p1的X值,[Y]是Y值。

该函数产生一个线性方程线。 (line *l) 首先如果sentense使x + C (p1[X]) = 0变为l。

什么我不知道的是:

  • 在C语言中,我怎么能代表p1[X]

  • p1是一维数组吗?那么,XY是不变的宏?

  • 或者,使用C++,这是一个重载的运算符[]?那么,点类型已经重载了operator [] ???

  • 或者是C中有点类型?我搜索谷歌“点C型”,我什么也没找到。

+5

你的问题的答案应该是在这本书解决。由于C没有内置的'point'类型,本书的作者可能会在之前对其进行定义。 –

回答

2

假设它是C代码,如p1[]操作者访问的,我的猜测是point类型很可能是一个typedef到一个数组。

#define X 0 
#define Y 1 
typedef double point[2]; 

我认为这是因为double表达(p1[Y]-p2[Y])/(p1[X]-p2[X])而不double蒙上写入。

+0

谢谢!这正是我需要的 –

1

前面已经说了,很可能这是C和一个标题包含:

typedef double point[2]; 
enum { X, Y }; 

或而非枚举,也可能是

#define X 0 
#define Y 1 

然而,这是不是最好的代码。 2点线方程是

(X - X 1)/(Y - Y 1)=(X2 - X1)/(Y2 - Y1)

交叉乘法:

(X - X 1) (y2-y1)=(y-y1)(x2-x1)

x(y2-y1)-y(x2-x1)-X1(y2-y1)+ y1(x2-x1)= 0

因此,我们可以只使用

A = Y2 - Y1,b = X1 - X2,C = - X1一 - Y1 b

或代码

l->a = p2[Y] - p1[Y]; 
l->b = p1[X] - p2[X]; 
l->c = - p1[X] * l->a - p1[Y] * l->b; 

这样就没有必要检查零。

1

需要定义结构point,类似于定义linetypedef。我将它设置这样的:

typedef struct { 
    double X; 
    double Y; 
} point; 

采用该结构,您可以访问的p1Xp1.X

另一种选择是在ouah's answer给出,他只是定义了一个点,与2大小的数组,在这种情况下,你会访问Xp1[0],并Y作为p1[1] - 如果x是第一位的,y是数组中的第二个值。这在代码中没有明确说明!当你真正想要访问X时,很容易混淆并编写p1[1](访问Y)。我认为,阵列方法是更易致代码,这就是为什么我会总是花时间写两行,正如我在上面的typedef那样的错误。

在我的例子,可以使用点操作符来访问结构的特定变量。在ouah的例子中,你使用[](是一个操作符?可能,但我不确定)访问数组内的元素。请注意,在C &有限公司,第一元素与索引0,第二个有1,2等第三

相关问题