Bit manipulation 如何为装配盒进行位逻辑
我不擅长比特逻辑,但我认为这将是解决我问题的最好办法 我必须找到一个物体是否适合一个盒子,我不会考虑3D旋转,而是简单的90°选项。 所以基本上,如果物体能以任何方式进入盒子 实际上,我正在对照长方体的尺寸检查对象的所有尺寸,这样我就知道Bit manipulation 如何为装配盒进行位逻辑,bit-manipulation,bitwise-operators,Bit Manipulation,Bitwise Operators,我不擅长比特逻辑,但我认为这将是解决我问题的最好办法 我必须找到一个物体是否适合一个盒子,我不会考虑3D旋转,而是简单的90°选项。 所以基本上,如果物体能以任何方式进入盒子 实际上,我正在对照长方体的尺寸检查对象的所有尺寸,这样我就知道ObjWidth是否适合BoxWidth或BoxLength或BoxHeight等等。 这是使用每个维度的标志enum定义的 enum En_Dimension { None = 0, Width = 1,
ObjWidth
是否适合BoxWidth
或BoxLength
或BoxHeight
等等。
这是使用每个维度的标志enum
定义的
enum En_Dimension
{
None = 0,
Width = 1,
Lenght = 2,
Height = 4,
All = Width | Length| Height,
}
所以我可以有(这意味着它适合那一边):
基本上我的方法应该是
bool FitIn (Size container)
{
En_Dimension width = En_Dimension.None;
En_Dimension length = En_Dimension.None;
En_Dimension height = En_Dimension.None;
for(var do in this.Dimensions){
for (var db in container.Dimensions){
if (do <= db) {
// already implemented code to
// SET width OR length OR height
}
}
}
/// EXAMPLES
/// 001 001
/// 110 001
/// 010 111
/// FIT DON'T FIT
return (/*width, length, height BIT LOGIC*/) == En_Dimension.All
}
可通过6个测试完成,对应于每个排列:
int fittingDims = (int)width | ((int)length << 4) | ((int)height << 8);
return (fittingDims & 0x124) == 0x124 ||
(fittingDims & 0x142) == 0x142 ||
(fittingDims & 0x214) == 0x214 ||
(fittingDims & 0x241) == 0x241 ||
(fittingDims & 0x412) == 0x412 ||
(fittingDims & 0x421) == 0x421;
int fittingDims=(int)width |((int)length所以如果我理解正确,我们需要计算的是“给定这些掩码,我们可以通过从每个掩码中选择一个位置来生成111吗”“哈罗德:是的,就是这个想法。顺便问一下,这到底是什么语言?我原以为是C语言,但它并不完全符合C语言,只是为了给出代码的概念。
1** 1** *1* *1* **1 **1
*1* **1 1** **1 1** *1*
**1 *1* **1 1** *1* 1**
int fittingDims = (int)width | ((int)length << 4) | ((int)height << 8);
return (fittingDims & 0x124) == 0x124 ||
(fittingDims & 0x142) == 0x142 ||
(fittingDims & 0x214) == 0x214 ||
(fittingDims & 0x241) == 0x241 ||
(fittingDims & 0x412) == 0x412 ||
(fittingDims & 0x421) == 0x421;