给出2组积分
((x1,y1,z1),(x2,y2,z2),(x3,y3,z3))和
((p1,q1,r1),(p2,q2,r2),(p3,q3,r3))各自在3D空间中形成三角形.
你怎么知道这些三角形是否相交?
该问题的一个显而易见的解决方案是找到由每个三角形形成的平面的方程.如果平面是平行的,则它们不相交.
否则,使用这些平面的法向矢量找出由这些平面的交点形成的线的方程.
现在,如果该线位于两个三角形区域中,则这两个三角形相交,否则不相交.
trianglesIntersect(Triangle T1, Triangle T2)
{
if(trianglesOnParallelPlanes(T1, T2))
{
return false
}
Line L1 = lineFromPlanes(planeFromTriangle(T1), planeFromTriangle(T2))
if(lineOnTriangle(T1, L1) AND lineOnTriangle(T2, L1))
{
return true
}
return false
}
Run Code Online (Sandbox Code Playgroud)
鉴于我知道如何编写上述函数,我应该考虑使用trianglesIntersect的其他实现吗?
是否有更快的算法来解决这个问题?
给定一个n个整数元素的数组,如何在不使用任何额外空间的情况下在O(n)时间内找到数组中是否存在重复项.
额外的空间意味着额外的O(n)空间.
Xor操作员是否以任何方式提供帮助.
找到n个不同元素的未排序列表的最大和最小元素所需的最小比较次数是多少?
上述算法的最佳时间复杂度是多少?
从最小数量的比较,我打算指定最有效的算法,在最坏的情况下.
如何在C++中定义类的非静态const数据成员?如果我尝试编译以下代码:
class a
{
public:
void print()
{
cout<<y<<endl;
}
private:
const int y=2;
};
int main()
{
a obj;
obj.print();
}
Run Code Online (Sandbox Code Playgroud)
我收到一个错误
ISO C++ forbids initialization of member ‘y’
Run Code Online (Sandbox Code Playgroud) 这是一个C代码片段
char *p="Hello World";
int a;
char b;
printf("%d\n",sizeof(p++));
printf("%c\n",*p);
printf("%d",sizeof(a,b));
printf("%d",sizeof(b,a));
Run Code Online (Sandbox Code Playgroud)
这是输出
4
H
1
4
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释为什么p没有增加,这里使用逗号运算符是什么.我读到它与VLA有关.
这似乎是一个非常基本的问题,但它与编译器的工作方式有关.什么是函数的局部变量的内存分配顺序.
假设我有一个功能
int a,b;
int c1;
int c,d;
int c2;
cout<<&a<<endl;
cout<<&b<<endl;
cout<<&c<<endl;
cout<<&d<<endl;
cout<<&c1<<endl;
cout<<&c2<<endl;
int f;
cout<<&f<<endl;
Run Code Online (Sandbox Code Playgroud)
这里f得到最低的内存地址(相对于其他变量),好像初始化堆栈是这样构建的:
a b c1 c d c2 f
Run Code Online (Sandbox Code Playgroud)
然后分配了内存
这可能发生,因为有各种编译阶段,这是其中之一.
该堆栈构建的哪个阶段对应于哪个阶段实际分配的内存?
这是一段代码:
class GameBoard
{
public:
GameBoard() { cout<<"Gameboard()\n"; }
GameBoard(const GameBoard&)
{
cout<<"GameBoard(const GameBoard&)\n";
}
GameBoard& operator=(const GameBoard&)
{
cout<<"GameBoard& operator=(const GameBoard&)\n";
return *this;
}
~GameBoard() { cout<<"~GameBoard()\n";};
};
class Game
{
GameBoard gb;
public:
Game(){ cout<<"Game()\n"; }
Game(const Game&g):gb(g.gb)
{
cout<<"Game(const Game&g)\n";
}
Game(int) {cout<<"Game(int)\n"; }
Game& operator=(const Game& g)
{
gb=g.gb;
cout<<"Game::operator=()\n";
return *this;
}
class Other
{
public:
Other(){cout<<"Game::Other()\n";}
};
operator Other() const
{
cout<<"Game::Operator Other()\n";
return Other();
}
~Game() {cout<<"~Game()\n";}
};
class Chess: public Game {}; …Run Code Online (Sandbox Code Playgroud)