在围绕点的圆中创建对象
Create objects in a circle around a point
本文关键字:创建对象 更新时间:2023-10-16
我需要在空间中的参考点周围创建一个规则间隔的门圈。每次运行程序时,圆圈中都会有不同数量的项目,因此它会自动重新缩放以适应增加的项目数量。我知道这更像是一个数学问题,而不是一个编程问题,但我被难住了!下面的代码与我得到的一样接近:
block->setPosition(core::vector3df(sin(segdeg*itemnumber)*radius+referencepoint.X,
0,
cos(segdeg*itemnumber)*radius+referencepoint.Z));
block 是对象,此代码针对每个项运行。Segdeg 是 360/项目数。也就是说,SEGment DEGrees。半径是项目需要与中心点的距离。项目编号是相关项目的索引 - 它是哪个编号项目。
出于某种原因,此代码使每扇门都非常接近,但仍有大约 10-15 度的偏差。 (不过第一扇门总是在现场) 不过,这些物品都与中心点的距离正确。我确信这是一个非常明显的答案问题,但是我已经几个小时无法解决它了,我已经用谷歌搜索了我的屁股。
任何人都可以修复我的算法吗?
sin
和cos
以弧度而不是度数来计算他们的论点。你想要segrad = 2 * pi / the_number_of_items
(SEGment RADians)而不是segdeg = 360.0 / the_number_of_items
(SEGment DEGrees)。
您的实现可能会为 pi 提供值,但标准中没有值,因此您可能必须使用 boost::math::constants::pi<double>()
或放入自己的值。
您的第一项是正确的,因为 0 在任何度量中都是 0。
int doors = 5;
double rotation = 2 * M_PI / doors;
for(int door = 0; door < doors; ++door)
{
double door_rotation = door * rotation;
double door_x = reference_x + cos(door_rotation);
double door_y = reference_y + sin(door_rotation);
}
相关文章:
- 使用基类指针创建对象时,缺少派生类析构函数
- 如何创建对象函数指针C++映射?
- C++创建对象数组
- 在 C++ 的 Switch Case 中创建对象后对对象调用方法
- 如何获取在 main() 函数中构造的类的创建对象?
- 基于文件中的条目创建对象
- 错误:创建对象后无法分配区域
- C++ 通过输入创建对象
- 堆还是堆栈用于创建对象?
- 使用 C++ 创建对象数组
- 使用unique_ptr创建对象
- C++递归地在类构造函数中创建对象
- 通过向构造函数其他对象引用页面来创建对象
- ReactiveX (rx) - 在对象上应用可观察对象,而不是在可观察对象中创建对象
- 如何在OSX上正确创建C++对象文件(.o)
- 编译器是否会创建vtable,而不考虑在c++中创建对象
- 创建对象并防止被破坏
- 在C++中,友元类可以从友元类创建对象吗
- 只在堆中创建C++对象
- 创建用户定义的复制构造函数时无法创建对象