gpt4 book ai didi

c++ - 将对象的 X 坐标归一化为更小或更大的坐标

转载 作者:太空宇宙 更新时间:2023-11-04 11:34:06 25 4
gpt4 key购买 nike

这几乎是一个与代码无关的问题。我不确定这是否是正确的术语,但我正在寻找执行此操作的公式。

基本上我的游戏中有一个矩形“网关”对象,可以在关卡之间转移玩家。

gateway在我的例子中,我有两个“网关”矩形,矩形 A 是 1200 像素宽,矩形 B 是 330 像素宽。 (2个矩形宽度不同的原因是因为另一层的比例因子不同)

当“玩家”对象与矩形 A 碰撞时,它应该进入下一个级别并从矩形 B 退出,但是从与其进入相关的坐标(从矩形 A)但“标准化”以适合大小矩形 B.

最佳答案

我相信您正在寻找的是能够将第一个范围内的值的相对位置映射到另一个范围内的相应位置。

这是一个 C++ 函数,它获取两个范围的下限和上限以及您希望从范围一映射到范围二的输入值。有一种边缘情况,函数将除以零。如果检测到这种情况,它会返回一个位于超出范围中间的值。

inline float rangeMapFloat( float inRangeStart,
float inRangeEnd,
float outRangeStart,
float outRangeEnd,
float inValue )
{

// Handle the zero edge case
if ( inRangeStart == inRangeEnd ) {
return 0.50f * ( outRangeStart + outRangeEnd );
}

float outValue = inValue;

outValue = outValue - inRangeStart;
outValue = outValue / ( inRangeEnd - inRangeStart );
outValue = outValue * ( outRangeEnd - outRangeStart );
outValue = outValue + outRangeStart;

return outValue;

}

例如,如果您的较大矩形宽度为 0-1200 像素,较小矩形宽度为 0-400 像素,并且玩家与较大矩形的像素 800 发生碰撞,则函数调用如下所示;

float teleportLocationWithinNewRect = rangeMapFloat( 0.0f, 1200.0f, 0.0f, 400.0f, 800.0f );

在这种情况下,800.0f 是大矩形宽度的 2/3,因此返回的值将是 400.0f 值的 2/3 (~ 266.7f)。

关于c++ - 将对象的 X 坐标归一化为更小或更大的坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23477916/

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