行进立方体,按位和OR

时间:2017-03-06 21:00:50

标签: algorithm opengl visualization computer-science marching-cubes

为了理解行进立方体算法,我遵循了以下页面: http://paulbourke.net/geometry/polygonise/

我有一些问题: 什么做按位&和|是什么意思?,以及它们如何使用边缘表来找到正确的tringles?

  • if(grid.val [0]< isolevel)cubeindex | = 1;

  • if(edgeTable [cubeindex]& 1)   vertlist [0] =      VertexInterp(ISOLEVEL,grid.p [0],grid.p [1],grid.val [0],grid.val [1]);

2 个答案:

答案 0 :(得分:1)

不打算读那篇文章。但是在这里你可以找到位运算符如何工作https://en.wikipedia.org/wiki/Bitwise_operations_in_C。 `

cubeindex |= 1 --> cubeindex = cubeindex | 1. 

例如cubeindex = 26(binary 11010)和1(binary 00001

11010  | 00001 = 11011

这里你广告一个26-> 27。

对于以下edgeTable[cubeindex] & 1

例如cubeindex = 17(binary 10001)\

10001 &  00001  = 00001

这变为1.在if语句中使用,这只是检查数字edgeTable[cubeindex]是否包含位00001并相应地返回true或false。

希望这有助于:)

干杯

答案 1 :(得分:0)

按位& (和)和| (或)对整数值内的所有位进行操作。它独立地对每个位进行操作,并且通常与您一起使用,它具有一组布尔值(表示标志),用于指示各种对象的状态。它也可以使用(如在您的示例中)或测试特定标志而不修改其他标志。

整数中的位表示两个值的幂。如果该位设置为true,那么2的幂将包含在其值中。如果该位为false,则不包含该位。最低有效位b0表示2 ^ 0,位1表示2 ^ 1,依此类推。

例如,二进制值5 = 101,因为5 = 2 ^ 2 + 2 ^ 0 = 4 + 1 = 5

如果任一操作数在该位置包含一个操作数,则按位OR通过将结果中的位设置为1来工作。当且仅当两个操作数在该位置都有1时,按位AND通过将每个位设置为1来工作。

例如:

Bitwise OR:     5 | 9 = 0101 | 1001 = 1101
Bitwise AND:    5 & 9 = 0101 & 1001 = 0001

使用这些运算符,如果cubeindex中的位值集表示一组状态(true或false值),则可以使用相同的按位操作数进行测试,如果特定状态为true,则忽略其他位。

在你的例子中:

cubeindex |= 1

将cubeindex中的最低有效位设置为true(1),无论之前是什么。这是因为任何位值与0的按位OR是相同的位值,而任何位值1的按位OR始终为1,因此与将该位设置为1相同,无论其先前的stae如何。它相当于:

cubeindex = cubeindex | 000000000000000001 = cubeindex,b0设置为1

逻辑AND用于测试edgeTable [cubeindex]的最低有效位是否等于1.条件仅在该值的b0为1时才为真。为什么?因为其他位无关紧要,因为它们是按位AND并且为零,这始终为零。

edgeTable [cubeindex]& 1 =位0的值