0

我正在阅读 Hacker News,这篇文章出现了。它包含一个光线追踪器,代码写在名片的背面。我认为将 c++ 翻译成 python 将是一个很好的学术挑战,但是我坚持了一些概念。

首先,这个函数上来:i T(v o,v d,f& t,v& n){...}翻译成int Tracer(vector o, vector d, float& t, vector& n){...}什么float&意思?我知道在其他地方&被用作一个==是这样的吗?你能在 C++ 中做到这一点吗?

其次,我注意到这三行:

for(i k=19;k--;)  //For each columns of objects
for(i j=9;j--;)   //For each line on that columns
if(G[j]&1<<k){

我知道这<<是一个位移,我假设&==。for 循环是否就像另一个循环中的一个 for 循环一样?

最后,这一行: v p(13,13,13);我不太确定它的作用。它是否创建了一个由 p 标记的类,该类扩展了默认值为 13、13、13 的 v(向量)?

这些可能是愚蠢的问题,但我想看看我是否能理解这一点,我的搜索没有提出任何问题。先感谢您!

4

2 回答 2

3

是什么float&意思?

这里,&表示“引用”,所以参数是通过引用传递的。

我知道在其他地方&被用作一个==是这样的吗?

&在不同的语境中意味着不同的事物,但绝不意味着==. 在这种情况下,它也不是运算符。它是类型规范的一部分,这意味着它是一个引用类型。

我知道 << 是位移,我假设&==

不,它是按位和运算符。结果在两个操作数中都设置了一个位的位置设置了它的位。这里,1<<k作为一个操作数,结果是 ; 的第kG[j]。所以这会测试该位是否已设置。

for 循环是否就像另一个循环中的一个 for 循环一样?

是的。如果你不在 for 循环的主体周围使用大括号,那么主体就是一条语句。所以在这种情况下,第一个循环的主体是第二个循环。为了清楚起见,我建议缩进循环体,并使用大括号,无论它们是否是绝对必要的。但当然,我不会(故意)编写混淆代码。

最后,这一行:v p(13,13,13);

v是一个带有三个参数的构造函数的类。这声明了一个名为 的变量p,类型为v,使用该构造函数进行初始化;即三个坐标被初始化为13

于 2013-09-24T16:36:11.370 回答
1

当您看到Vector& n它引用传递给函数的向量时。这意味着您可以n在此函数内部进行更改,而无需将其复制到另一个 Vector 或返回 Vector。这个以前的答案应该对你有帮助。

于 2013-09-24T16:26:12.293 回答