Vector 两个向量的x、y、z值的所有可能组合?

Vector 两个向量的x、y、z值的所有可能组合?,vector,position,combinations,bounds,Vector,Position,Combinations,Bounds,我在Unity中使用c#(尽管这个问题对任何一个都不特定),需要得到两个向量的所有可能组合: (x,y,z)和(-x,-y,-z) 因此,结果将是: (x,y,z) (-x,y,z) (-x,-y,z) (-x,-y,-z) (x,-y,z) (x,-y,-z) (x,y,-z) (-x,y,-z) 我知道x,y和z。原点在立方体的中心,我只需要得到立方体的x,y,z位置的每个角 我需要得到的要点是: 制作这八种组合的最简单、最快、最容易理解的方法是对这八种符号组合进行硬编码: IList<

我在Unity中使用c#(尽管这个问题对任何一个都不特定),需要得到两个向量的所有可能组合:

(x,y,z)和(-x,-y,-z)

因此,结果将是: (x,y,z) (-x,y,z) (-x,-y,z) (-x,-y,-z) (x,-y,z) (x,-y,-z) (x,y,-z) (-x,y,-z)

我知道x,y和z。原点在立方体的中心,我只需要得到立方体的x,y,z位置的每个角

我需要得到的要点是:

制作这八种组合的最简单、最快、最容易理解的方法是对这八种符号组合进行硬编码:

IList<int[]> MakeCombinations(int x, int y, int z) {
    return new[] {
        new[] { x,  y,  z}
    ,   new[] { x,  y, -z}
    ,   new[] { x, -y,  z}
    ,   new[] { x, -y, -z}
    ,   new[] {-x,  y,  z}
    ,   new[] {-x,  y, -z}
    ,   new[] {-x, -y,  z}
    ,   new[] {-x, -y, -z}
    };
}
IList生成组合(intx、inty、intz){
返回新的[]{
新[]{x,y,z}
,新[]{x,y,-z}
,新[]{x,-y,z}
,新[]{x,-y,-z}
,新[]{-x,y,z}
,新[]{-x,y,-z}
,新[]{-x,-y,z}
,新[]{-x,-y,-z}
};
}
如果您更喜欢一个包含更多编程的解决方案,您可以这样做(我使用数组作为向量;您可以使用特定的类):

int[]data=new[]{x,y,z};
IList all=新列表();
对于(int mask=0;mask!=8;mask++){
int[]next=new[]{data[0],data[1],data[2]};
如果((掩码&0x01)!=0)下一步[0]*=-1;
如果((掩码&0x02)!=0)下一步[1]*=-1;
如果((掩码&0x04)!=0)下一步[2]*=-1;
全部。添加(下一步);
}

向量分量前面的加号和减号组合使用单个三位数字
掩码
建模。当设置位置
N
处的位时,第
N
-th分量取负号;否则,用正号表示。

制作这八种组合的最简单、最快、最容易理解的方法是硬编码这八种符号组合:

IList<int[]> MakeCombinations(int x, int y, int z) {
    return new[] {
        new[] { x,  y,  z}
    ,   new[] { x,  y, -z}
    ,   new[] { x, -y,  z}
    ,   new[] { x, -y, -z}
    ,   new[] {-x,  y,  z}
    ,   new[] {-x,  y, -z}
    ,   new[] {-x, -y,  z}
    ,   new[] {-x, -y, -z}
    };
}
IList生成组合(intx、inty、intz){
返回新的[]{
新[]{x,y,z}
,新[]{x,y,-z}
,新[]{x,-y,z}
,新[]{x,-y,-z}
,新[]{-x,y,z}
,新[]{-x,y,-z}
,新[]{-x,-y,z}
,新[]{-x,-y,-z}
};
}
如果您更喜欢一个包含更多编程的解决方案,您可以这样做(我使用数组作为向量;您可以使用特定的类):

int[]data=new[]{x,y,z};
IList all=新列表();
对于(int mask=0;mask!=8;mask++){
int[]next=new[]{data[0],data[1],data[2]};
如果((掩码&0x01)!=0)下一步[0]*=-1;
如果((掩码&0x02)!=0)下一步[1]*=-1;
如果((掩码&0x04)!=0)下一步[2]*=-1;
全部。添加(下一步);
}
向量分量前面的加号和减号组合使用单个三位数字
掩码
建模。当设置位置
N
处的位时,第
N
-th分量取负号;否则,将以正号表示