【问题标题】:Translate one line from C to Python将一行从 C 翻译成 Python
【发布时间】:2021-04-26 17:20:12
【问题描述】:

我目前正在关注一个教程来编写光线投射,该教程是用 C 语言编写的,我正在用 Python 重写它,但我无法理解以下行,因此无法在 python 中翻译它:

float aTan = -1/tan(ra);
ry = (((int)py>>6)<<6-0.0001;
rx = (py-ry)*aTan+px;

其中 ry 和 rx 是我认为第一条水平线和射线之间的交点的 y 和 x 坐标。 此外,ra 是射线的角度。 aTan 和 rx 的行只是数学,所以我理解它们,但是像我这样的 python 学生不熟悉 ry 的写作,你能启发我吗?

【问题讨论】:

  • ...您希望人们猜出rapy 是什么?请作为这里的新用户使用tour 并阅读How to Ask

标签: python c raycasting


【解决方案1】:

“>>”运算符是右移,所以整数除以 2 的幂。

数字

ry = (((int)py>>6)<<6-0.0001;

等价于

ry = (py // 64) * 64 - 0.0001

(自2^6 == 64

【讨论】:

  • Python 也有 &gt;&gt;&lt;&lt;
  • 哦,非常感谢!现在很清楚了
  • @MarkRansom 这就是我写“数字”等价物的原因。截断除法 // 也适用于浮点数,所以我们不用 int 演员表。但是,是的,原则上同一行也可以在 Python 中使用,除了强制转换为 int。
  • 我的意思是,该语句几乎按原样是有效的 Python,无需通过解释右移如何等同于除法来引入额外的混淆。 ry = (int(py)&gt;&gt;6)&lt;&lt;6-0.0001 更容易关联到原始代码。
  • P.S.将除法结果转换为 int 并不总是与截断除法相同。比较 int(-1/2)-1//2
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-23
  • 2019-03-29
  • 1970-01-01
  • 2014-11-17
  • 1970-01-01
相关资源
最近更新 更多