- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个问题困扰着我;我的目标是创建一个八叉树。
实际上,它非常便宜(但对于我想用那个八叉树做的事情来说已经足够了)。
我的问题是我的 std::vector<std::reference_wrapper<Point>>
填充相同的值。所以我的插入创建了一个无限循环。但这是代码,也许它会更容易理解。我在错误发生的地方添加了注释。
void main(){
std::random_device rd;
std::mt19937 rng(rd());
std::uniform_real_distribution<double> uni(0, 2);
auto random_integer = uni(rng);
Point firstCenter = Point(1, 1, 1);
Point firstHalfDimension = Point(1, 1, 1);
Octree oct(firstCenter, firstHalfDimension);
for (int i = 0; i < 3; ++i) {
double x = uni(rng);
double y = uni(rng);
double z = uni(rng);
Point ptmp = Point(x, y, z);
std::cout << x << " " << y << " " << z << std::endl;
auto po = std::ref(ptmp);
oct.insert(po);
}
}
class Octree {
Node octree;
Point firstCenter;
Point firstHalfDimension;
public:
Octree() = default;
Octree( Point& firstCenter, Point& firstHalfDimension) :
firstCenter(firstCenter), firstHalfDimension(firstHalfDimension), octree(firstCenter, firstHalfDimension) {}
void insert(std::reference_wrapper<Point> pt) {
octree.insert(pt);
}
};
#define MAXVAL 2
using Point = gmtl::Vec3d;
class Node {
Point center;
Point halfDimension;
std::vector<std::reference_wrapper<Point>> datas;
std::array<std::shared_ptr<Node>, 8> children;
int getOctant(const std::reference_wrapper<Point> p) {
int oct = 0;
if (p.get()[0] >= center[0]) oct |= 4;
if (p.get()[1] >= center[1]) oct |= 2;
if (p.get()[2] >= center[2]) oct |= 1;
return oct;
}
const bool isLeaf() {
return !children[0];
}
public:
Node(Point center, Point halfDimension) : center(center), halfDimension(halfDimension){
}
void insert(const std::reference_wrapper<Point> p) {
if (isLeaf()){
if (datas.size() == MAXVAL) { //Must subdivide
std::cout << p.get()[0] << " " << p.get()[1] << " " << p.get()[2] << std::endl;
for (int i = 0; i < datas.size(); ++i) {
std::cout << datas[i].get()[0] << " "
<< datas[i].get()[1] << " "
<< datas[i].get()[2] << std::endl;
//The problem is here : the vector is filled with the same values, and it's the same value as p. let's say p = (0.4,0.7,0.8), then the for loop will show to the screen :
// 0.4 0.7 0.8
// 0.4 0.7 0.8
// 0.4 0.7 0.8
}
for (int i = 0; i < 8; ++i) {
Point newCenter;
newCenter[0] += halfDimension[0] * (i & 4 ? .5f : -.5f);
newCenter[1] += halfDimension[1] * (i & 2 ? .5f : -.5f);
newCenter[2] += halfDimension[2] * (i & 1 ? .5f : -.5f);
children[i] = std::make_shared<Node>(newCenter, halfDimension * .5);
}
int octant = getOctant(p);
children[octant]->insert(p);
for (int i = 0; i < datas.size(); ++i) {
int octant = getOctant(datas[i]);
children[octant]->insert(datas[i]);
}
}
else { //Just add
datas.push_back(p);
}
}
else { //Non-leaf node
children[getOctant(p)]->insert(p);
}
}
};
我真的不明白我做错了什么。
最佳答案
std::vector<std::reference_wrapper<Point>> datas;
某些东西必须拥有此 vector 包含引用的对象。
您用对不再存在的对象的引用填充了 vector 。目前尚不清楚为什么您认为您需要一个引用 vector ,但您不应该做一些不寻常的事情,除非您有一个很好的解释为什么正常方式(一个值 vector )不适合您。
关于c++ - 引用包装器 vector ,push_back 失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45276046/
正在尝试创建一个 python 包。似乎有效,但我收到警告。我的 setup.py 是: #! /usr/bin/env python from distutils.core import setup
我导入了一个数据类型 X ,定义为 data X a = X a 在本地,我定义了一个通用量化的数据类型,Y type Y = forall a. X a 现在我需要定义两个函数, toY 和 fro
我似乎无法让编译器让我包装 Tokio AsyncRead: use std::io::Result; use core::pin::Pin; use core::task::{Context, Po
我有两个函数“a”和“b”。当用户上传文件时,“b”被调用。 “b”重命名文件并返回新文件名。之后应该编辑该文件。像这样: def a(): edits file def b(): r
我使用 Entity Framework 作为我的 ORM,我的每个类都实现了一个接口(interface),该接口(interface)基本上表示表结构(每个字段一个只读属性)。这些接口(inter
有没有办法打开一个程序,通常会打开一个新的jframe,进入一个现有的jframe? 这里是解释,我下载了一个java游戏,其中一个是反射游戏,它在一个jframe中打开,框架内有一堆子面板,我想要做
我想要下面的布局 | AA BBBBBBB | 除非没有足够的空间,在这种情况下 | AA | | BBBBBBB | 在这种情况下,A 是复选框,B 是复选框旁边的 Text
我正在尝试以不同的方式包装我的网站,以便将背景分为 2 部分。灰色部分是主要背景,还有白色部分,它较小并包装主要内容。 基本上我想要this看起来像this . 我不太确定如何添加图像来创建阴影效果,
我正在使用 : 读取整数文件 int len = (int)(new File(file).length()); FileInputStream fis = new FileInputStream(f
我使用 maven 和 OpenJDK 1.8 打包了一个 JavaFX 应用程序我的 pom.xml 中的相关部分: maven-assembly-plugin
我正在使用两个不同的 ItemsControl 来生成一个按钮列表。
我有一个情况,有一个变量会很方便,to , 可以是 TimerOutput或 nothing .我有兴趣提供一个采用与 @timeit 相同参数的宏来自 TimerOutputs(例如 @timeit
我正在尝试包装一个名为 content 的 div与另一个具有不同背景的 div。 但是,当将“margin-top”与 content 一起使用时div,似乎包装 DIV 获得了边距顶部而不是 co
文档不清楚,它似乎允许包装 dll 和 csproj 以在 Asp.Net Core 5 应用程序中使用。它是否允许您在 .Net Core 5 网站中使用针对 .Net Framework 4.6
我被要求开发一个层,该层将充当通用总线,而不直接引用 NServiceBus。到目前为止,由于支持不引人注目的消息,这并不太难。除了现在,我被要求为 IHandleMessages 提供我们自己的定义
我正在尝试包装 getServersideProps使用身份验证处理程序函数,但不断收到此错误:TypeError: getServerSideProps is not a function我的包装看
我有一个项目,它在特定位置(不是/src/resources)包含资源(模板文件)。我希望在运行 package-bin 时将这些资源打包。 我看到了 package-options 和 packag
我正在寻找打印从一系列对象中绘制的 div。我可以通过使用下面的管道语法来实现这一点。 each i, key in faq if (key == 0) |
我在 Meteor.js“main.js - Server”中有这个方法。 Meteor.methods({ messageSent: function (message) { var a
我注意到,如果我的自定义Polymer 1.x元素的宽度比纸张输入元素上的验证错误消息的宽度窄,那么错误将超出自定义元素的右边界。参见下图: 有没有一种机制可以防止溢出,例如在到达自定义元素的边界时自
我是一名优秀的程序员,十分优秀!