C++ C++;尝试生成给定最大/最小x/y/z值、集合中的n个点和增量的m个值的每个可能点集

C++ C++;尝试生成给定最大/最小x/y/z值、集合中的n个点和增量的m个值的每个可能点集,c++,vector,3d,point,C++,Vector,3d,Point,我以前贴过这个问题,但我想我解释得很糟糕。基本上,我想生成大小为n的所有可能的点集,其中包含由用户给定的原点(0,0,0)和点(Y1,Y2,Y3)限定的区域内的点,设置值m为增量 例如,如果n是3,m是1,(Y1,Y2,Y3)是(1,1,1),生成的点集将是(每一行都是一个集): 这是我最初尝试的,但它只是对每个单独的点执行我想要的操作,而没有找到正确的总体集合(pointset是大小为n的点对象向量,已在主程序中创建,每个点初始化为(0,0,0)): void allPoints(双Y1、双Y

我以前贴过这个问题,但我想我解释得很糟糕。基本上,我想生成大小为n的所有可能的点集,其中包含由用户给定的原点(0,0,0)和点(Y1,Y2,Y3)限定的区域内的点,设置值m为增量

例如,如果n是3,m是1,(Y1,Y2,Y3)是(1,1,1),生成的点集将是(每一行都是一个集):

这是我最初尝试的,但它只是对每个单独的点执行我想要的操作,而没有找到正确的总体集合(pointset是大小为n的点对象向量,已在主程序中创建,每个点初始化为(0,0,0)):

void allPoints(双Y1、双Y2、双Y3、双精度、向量点集)
{
int count=pointset.size()-1;
而(计数>=0)
{

while(pointset.at(count).getX()如果我理解正确,您只需使用基数Y1、Y2,然后是Y3进行计数并存储结果,因此您可以使用大小为n的
std::list
,并像在基数10中计数一样计数(在到达Y1时,您将行重置为0,并将下一行设置为1)。当int[3]如果已满,则需要清空它并转到下一个整数[3]

您需要一个
countBase(const unsigned short&base)
函数,该函数在循环的每个周期中递增一个值,并在达到
base
时重置该值,然后递增下一个值。当列表中的每个值都等于Y1、Y2或Y3时,程序结束

我不知道您打算用它做什么,但是您可以在每次执行循环时显示std::list的存储状态

不要忘记,你正在做的事情就像是在你自己的奇怪的基础上计算并存储结果,这应该不难

[编辑] 在查看了您的编辑之后,我肯定认为您应该只使用一个循环,一个ushort[3]容器,一种递增到
base
的方法,并找到一种保持结果的方法,它将更易于阅读,并且应该提供您想要的内容

[编辑]
我认为使用std::list也会更快,对于这种类型的项目,您可能需要一些性能。

堆栈溢出处理软件问题。您还没有遇到软件问题,因此处于劣势。您可以发布“这是我的计划,有人看到它有问题吗?”问题,或者您可以发布“我一直在进行以下研究,寻找解决我问题的可行方案,但我陷入了困境。我下一步应该去哪里?”他问道。
(0, 0, 0) & (0, 0, 0) & (0, 0, 0)
(0, 0, 0) & (0, 0, 0) & (0, 0, 1)
(0, 0, 0) & (0, 0, 0) & (0, 1, 0)
(0, 0, 0) & (0, 0, 0) & (0, 1, 1)
(0, 0, 0) & (0, 0, 0) & (1, 0, 0)
(0, 0, 0) & (0, 0, 0) & (1, 0, 1)
(0, 0, 0) & (0, 0, 0) & (1, 1, 0)
(0, 0, 0) & (0, 0, 0) & (1, 1, 1)
(0, 0, 0) & (0, 0, 1) & (0, 0, 0)
(0, 0, 0) & (0, 0, 1) & (0, 0, 1)
(0, 0, 0) & (0, 0, 1) & (0, 1, 0)
(0, 0, 0) & (0, 0, 1) & (0, 1, 1)
(0, 0, 0) & (0, 0, 1) & (1, 0, 0)
(0, 0, 0) & (0, 0, 1) & (1, 0, 1)
(0, 0, 0) & (0, 0, 1) & (1, 1, 0)
(0, 0, 0) & (0, 0, 1) & (1, 1, 1)

.......

(1, 1, 1) & (1, 1, 1) & (1, 1, 1)
void allPoints(double Y1, double Y2, double Y3, double precision, vector<Point> pointset)
{
int count = pointset.size()-1;

while (count>=0)
{
    while (pointset.at(count).getX()<Y1) //runs through every possible rectangle within rectangle created by given point Y and origin
    {
        while (pointset.at(count).getY()<Y2)
        {
            while (pointset.at(count).getZ()<Y3)
            {
                // insert formula to test each set with here
                pointset.at(count).incZ(precision);

            }
            pointset.at(count).setZ(0);
            pointset.at(count).incY(precision);
        }
        pointset.at(count).setY(0);
        pointset.at(count).incX(precision);

    }
    count--;
}


}