gpt4 book ai didi

c++ - 光线转换算法中的精度问题

转载 作者:太空狗 更新时间:2023-10-29 21:42:37 24 4
gpt4 key购买 nike

我正在编写光线转换引擎。

射线的起始位置由站在二维网格内的玩家的位置给出。

当向一个方向转换光线时,我必须确定光线相交的网格。

(概念的深入描述在这里:http://www.permadi.com/tutorial/raycast/rayc7.html)

有一个小的不准确导致了一些麻烦。我认为问题是由网格步长计算不正确引起的。

但是我缺乏解决该问题的数学理解力。

问题描述:

当光线向左移动时,网格相交步长与向右移动时的步长略有不同。

(为什么我什至关心这个?:当垂直和水平交叉点彼此靠近时,这导致一些水平网格交叉点比垂直网格交叉点离玩家更远的问题,特别是在角落。因为我为垂直交叉使用不同的纹理,水平墙的外观会被破坏,因为垂直纹理用于墙的一小部分,即使它是水平墙。)

这个问题是不是我的算法有问题导致的?这就是我如何计算第一个水平网格交点和网格步长:

找到第一个网格交点:

if (current_angle > 180) {
first_grid_horizontal_y = ((int)p.pos_y / Field::width) * Field::width + Field::width;
} else {
first_grid_horizontal_y = ((int)p.pos_y / Field::width) * Field::width - 1;
}
first_grid_horizontal_x = p.pos_x + (p.pos_y - first_grid_horizontal_y) / tan( 180 - current_angle);

计算步长:

if (current_angle > 180) {
grid_stepsize_horizontal_y = Field::width;
grid_stepsize_horizontal_x = Field::width / tan(current_angle - 180);
} else {
grid_stepsize_horizontal_y = -Field::width;
grid_stepsize_horizontal_x = Field::width / tan(180 - current_angle);
}

如您所见,我总是使用“180 - 当前角度”来确定 x 值的方向。这会导致不准确吗?我是否必须对角度进行更多区分?

最佳答案

三角函数使用弧度,而不是角度。所以

tan(180 - current_angle)

应该是这样的

tan(Math.Pi - current_angle)

注意等于

- tan(current_angle)

如果您的 current_angle 以度为单位:

current_angle_radians = current_angle_degrees * Math.Pi / 180

关于c++ - 光线转换算法中的精度问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25635462/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com