我的跨产品代码有什么问题

what is wrong with my cross product code

本文关键字:什么 问题 代码 我的      更新时间:2023-10-16

我是一个C++初学者。我想得到一个表面的法线向量,它由三个点 a、b 和 c 决定。我有以下代码,但我不知道它有什么问题。感谢您的帮助。

#include <iostream>
using namespace std;
class point
{
public:
 double x,y,z;
}; 
class crproduct:point 
{
public:
    double x1,x2,x3,y1,y2,y3,z1,z2,z3,Ax,Ay,Az,Bx,By,Bz;
    point crproduc(point *a,point *b,point *c) 
    {            
        //point a
        x1 = (*a).x;
        y1 = (*a).y;
        z1 = (*a).z;
        //point b
        x2 = (*b).x;
        y2 = (*b).y;
        z2 = (*b).z;
        //point c
        x3 = (*c).x;
        y3 = (*c).y;
        z3 = (*c).z;
        //Vector A
        Ax = x1-x2;
        Ay = y1-y2;
        Az = z1-z2;
        //vector B
        Bx = x2-x3;
        By = y2-y3;
        Bz = z2-z3;
        //cross product
        point vector;
        vector.x = (Ay*Bz)-(By*Az);
        vector.y = -(Ax*Bz)+(Bx*Az);
        vector.z = (Ax*By)-(Ay*Bx);
        return vector;
    }
};

int main () 
{
    point  *pp, *p1, *p2;
    point cd;
    crproduct cr1,cr2,cr3,cr4;
    (*pp).x = 12;
    (*pp).y = 13;
    (*pp).z = 15
    (*p1).x = 10;
    (*p1).y = 10;
    (*p1).z = 10;
    (*p2).x = 8;
    (*p2).y = 5;
    (*p2).z = 2;
    cd = cr1.crproduc(pp,p1,p2);
    cout << cd.x << " " << cd.y << " " << cd.z << endl;
    system("pause");
    return 0;
}
这是

不正确的:

 point  *pp,*p1,*p2;
 point cd;
 crproduct cr1,cr2,cr3,cr4;
 (*pp).x=12;
 (*pp).y=13;
 (*pp).z=15
 (*p1).x=10;
 (*p1).y=10;
 (*p1).z=10;
 (*p2).x=8;
 (*p2).y=5;
 (*p2).z=2;

除了缺少的分号外,point *pp,*p1,*p2行还建立了三个类型指针。它不会创建任何对象或实例化指针。因此,此时,使用指针将产生未定义的结果。

然后,您继续访问指针。

如果您希望它们在堆栈上,只需直接将对象声明为:

point pp, p1, p2;

。然后适当地访问。如果你在堆上需要它们,那么你应该使用 new 来创建指针可以指向的对象,例如

pp = new point;

别忘了稍后delete