标签: boolean-operations

计算两个任意形状的并集

我正在开发一个应用程序,我需要能够组合用户绘制的两个重叠的任意形状.这将是两种形状上的联盟操作.得到的形状将是两个重叠形状的轮廓.

形状以顺时针方式存储为一系列点.

理想情况下,我想要一个算法,它将采用两个Point(x,y)数组,并返回一个结果形状的单个数组.

我一直在阅读关于多边形的布尔运算的维基百科,其中提到了扫描线算法,但是我无法在此与我的目标之间建立联系,唉,我不是数学家.

我正在使用ActionScript 3开发应用程序,但我熟悉C#,Java,我可以通过C和C++来选择.

math geometry boolean-operations

8
推荐指数
1
解决办法
5821
查看次数

位标志的简单布尔运算符

我试图在我的项目中了解更多有关此内容的信息.

我目前基本上有这个:

unsigned char flags = 0; //8 bits

flags |= 0x2; //apply random flag

if(flags & 0x2) {
   printf("Opt 2 set");
}
Run Code Online (Sandbox Code Playgroud)

现在我希望做一些更复杂的事情,我想要做的是应用这样的三个标志:

flags = (0x1 | 0x2 | 0x4);
Run Code Online (Sandbox Code Playgroud)

然后删除标志0x1,并0x2从它?我以为我可以做这样的事情应用按位NOT(和按位AND来应用它):

flags &= ~(0x1 | 0x2);
Run Code Online (Sandbox Code Playgroud)

显然,当我检查时,他们会留在那里或者某种方式.

我也不知道如何检查它们是否不存在于位标志中(所以我无法检查我之前的代码是否有效),它会是这样的吗?

if(flags & ~0x2) 
    printf("flag 2 not set");
Run Code Online (Sandbox Code Playgroud)

我无法从我最近的搜索中找到适用于此的任何资源,我愿意学习这些来教别人,我真的很感兴趣.如果这令人困惑或简单,我道歉.

c c++ bitflags boolean-operations

8
推荐指数
2
解决办法
2万
查看次数

确保给定列表中只有一个布尔值是真的吗?

如果我有以下布尔值

const YESTERDAY = false;
const TODAY = true;
const TOMORROW = false;
Run Code Online (Sandbox Code Playgroud)

我可以写什么代码来确保一个是真的?

我试过这个:

$x = self::YESTERDAY ^ self::TODAY ^ self::TOMORROW;
Run Code Online (Sandbox Code Playgroud)

问题是,与所有三个常量设置true,然后$xtrue.

php boolean-logic xor boolean-operations

8
推荐指数
1
解决办法
1138
查看次数

八进制全加器如何

我有这个项目听下面,我不知道从哪里开始也许有人可以给我一些指示或者可能指出我正确的方向开始这个?谢谢!!

输入: A,B =八进制数字(见下面的表示); Cin =二进制数字

输出: S =八进制数字(见下面的表示); Cout =二进制数字

任务:使用二进制FAs,设计一个充当八进制FA的电路.更具体地说,该电路将输入两个八进制数字A,B,将它们转换为二进制数,仅使用二进制FAs加入它们,将二进制结果转换回八进制数,并将该和输出为八进制数字,并且二进制数字执行.

八进制数字的输入/输出二进制表示

每个八进制数字将使用以下8位二进制表示来表示:

八进制8位输入线:

数字: 0 1 2 3 4 5 6 7
0 1 0 0 0 0 0 0 0
1 0 1 0 0 0 0 0 0
2 0 0 1 0 0 0 0 0
3 0 0 0 1 0 0 0 0
4 0 0 0 0 1 0 0 0
5 0 0 0 0 0 1 0 0 …

binary circuit computer-architecture boolean-operations

8
推荐指数
2
解决办法
2931
查看次数

用逐位运算替换最低有效位

使用提供的位替换字节的最低有效位的最佳方法是什么?

我知道如何检查和比较最后一位(使用例如posix ffs()函数),但我想知道是否有更好性能的解决方案,而不检查替换位是0还是1.

该示例以python编写为伪代码,但我将在C中实现工作算法:

>>> bin(0b1)             # bit is  '0b1'
>>> bin(128)             # byte is '0b10000000'
>>> bin(129)             # byte is '0b10000001'

>>> bin(128 OPERATOR 0b1)       # Replace LSB with 1
'0b10000001'
>>> bin(128 OPERATOR 0b0)       # Keep LSB at 0
'0b10000000'

>>> bin(129 OPERATOR 0b1)       # Keep LSB at 1
'0b10000001'
>>> bin(129 OPERATOR 0b0)       # Replace LSB with 0
'0b10000000'
Run Code Online (Sandbox Code Playgroud)

显然,运算符可以是一组运算,但我正在寻找最优(最快)的方法.

binary bit-manipulation bit-shift boolean-operations

7
推荐指数
1
解决办法
8205
查看次数

仅使用数学运算更改0-> 1或1-> 0的值

我在javascrit上有一个变量,初始化为0.我想做的是:

  • 如果值为0,则将其更改为1;
  • 如果值为1,则将其更改为0;

我将避免条件语句(如if/else)来检查值是什么.

我想我只是通过一些配合操作来做到这一点; 我想到了一个N​​OT操作,但我不知道如何在没有操作的情况下进行操作

javascript operators boolean-operations

7
推荐指数
2
解决办法
3708
查看次数

如何将自枚举pangram表示为布尔函数?

自我枚举pangrams的wiki文章指出它们是使用二元决策图计算的.我一直在阅读有关BDD的内容,根据我的理解,您需要先将一些问题表示为布尔函数,然后才能构建BDD.

我该怎么做呢?

我已经考虑了几天这个问题了,我很确定你可以使用简单的编码来表示布尔函数的输入:

10000 01010 01011 10101 ...
16A's 10B's 11C's 21D's ...
Run Code Online (Sandbox Code Playgroud)

所以对于一个pangram开始"十六A,十B,十一C,二十一D",你可以把它表示为10000010100101110101 ......

这意味着布尔函数中有26*5 = 130个变量,假设您将字符的最大频率限制为32次出现.

输出应该是表示是否是自我枚举的pangram,即如果句子描述其自己的一组频率.

要做到这一点,在此过程中肯定需要一个哈希表(或几个).

因此,对于字母E,哈希表可能会开始:

one   -> 1
two   -> 0
three -> 2
four  -> 0
five  -> 1
...
Run Code Online (Sandbox Code Playgroud)

二进制,可能看起来像:

1   -> 1
10  -> 0
11  -> 10
100 -> 0
101 -> 1
Run Code Online (Sandbox Code Playgroud)

如果来自E哈希表的所有查找的总和等于对应于E的五个输入比特,那么自枚举庞格的那部分是正确的.如果所有部分都正确则布尔函数应该为1,否则为0.

我很确定我可以弄清楚如何使用布尔函数执行加法以及如何检查两个数字是否相等.但是,我不知道从何处开始将哈希表表示为布尔函数.此外,将所有部分连接在一起可能会让我感到困惑.

有什么想法吗?想法?合作?我想知道这是怎么回事.

提前致谢.

binary logic hashtable boolean-expression boolean-operations

7
推荐指数
1
解决办法
296
查看次数

打字稿中的布尔列表是否有“all”或“any”运算符

我想写一个以下形式的 if 语句

if (all entries in booleanList are true) {do something}

只需放入 booleanList 就相当于 .any()

我无法在互联网或打字书中找到答案。预先感谢您的任何帮助。

boolean-operations typescript

7
推荐指数
2
解决办法
4788
查看次数

Google or-tools 库中约束的布尔运算

我是约束编程的初学者,我在我的 c# 程序中使用Google or-tools 库

我想向我的求解器添加以下约束:

((t1 >= 12 && t1 <= 15) || (t2 >= 16 && t2 <= 18)) && ( t1 + t2 ) < 30

所以我用c#写了下面一段代码:

var solver = new Solver("My_CP_Colver");
var t1 = solver.MakeIntVar(12, 20,"t1");
var t2 = solver.MakeIntVar(12, 20,"t2");

solver.Add(???)//<-((t1 >= 12 && t1 <= 15)||(t2 >= 16 && t2 <= 18)) && ( t1 + t2 ) < 30
Run Code Online (Sandbox Code Playgroud)

请帮助做出上述限制?

c# constraint-programming boolean-operations or-tools

6
推荐指数
2
解决办法
5174
查看次数

如何在 Julia 中对多个矩阵进行元素或运算?

我有几个布尔矩阵,我想要一个结果矩阵来指示这些矩阵的该位置中的任何元素是否为真。Julia 语言中是否有一个函数可以让我对任意数量的矩阵进行元素或运算?

\n
# My data\na = Bool[1 0; 1 1]\nb = Bool[0 0; 1 1]\nc = Bool[0 0; 0 0]\nd = Bool[0 0; 1 1]\n\n# Arrays of Bool Arrays\nz1 = [a]\nz2 = [a, b]\nz3 = [b, c, d]\nz4 = [a, b, c, d]\nz100 = [rand(Bool, 2, 2) for i in 1:100]\n\n# Expected\njulia> some_function(z1)\n2\xc3\x972 BitMatrix:\n 1  0\n 1  1\n\njulia> some_function(z2)\n2\xc3\x972 BitMatrix:\n 1  0\n 1  1\n\njulia> some_function(z3)\n2\xc3\x972 BitMatrix:\n 0  0\n 1  1\n\njulia> some_function(z4)\n2\xc3\x972 BitMatrix:\n 1  0\n 1  1\n\njulia> some_function(z100)\n2\xc3\x972 BitMatrix:\n 1 …
Run Code Online (Sandbox Code Playgroud)

iterator short-circuiting boolean-operations julia

6
推荐指数
1
解决办法
237
查看次数