Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何在在线绘图应用程序中为随机用户客户端唯一分配颜色/线条图案?_Algorithm_User Interface_Hash_Websocket_Client - Fatal编程技术网

Algorithm 如何在在线绘图应用程序中为随机用户客户端唯一分配颜色/线条图案?

Algorithm 如何在在线绘图应用程序中为随机用户客户端唯一分配颜色/线条图案?,algorithm,user-interface,hash,websocket,client,Algorithm,User Interface,Hash,Websocket,Client,我正在ReactNative中构建一个移动在线协作绘图应用程序。用户可以加入多达4个用户的房间,在那里他们可以一起绘制,并在相互可见的白板上看到彼此绘制的形状 我想为4位用户中的每一位分配一种独特的风格,例如 // Styles are a mix of color and lineStyle to accommodate color blindness const style1 = { color: "#fff", lineStyle: "dashed" } const style2 = {

我正在ReactNative中构建一个移动在线协作绘图应用程序。用户可以加入多达4个用户的房间,在那里他们可以一起绘制,并在相互可见的白板上看到彼此绘制的形状

我想为4位用户中的每一位分配一种独特的风格,例如

// Styles are a mix of color and lineStyle to accommodate color blindness
const style1 = { color: "#fff", lineStyle: "dashed" }
const style2 = { color: "#0f0", lineStyle: "solid" }
但是,我希望在客户端分配这些样式,而无需在服务器上集中管理和分配样式

样式可以从4个或更多的集合中预定义,也可以动态生成。房间必须处理用户离开和重新加入,例如手动或由于断开连接以及用户离开和其他不同用户加入。在任何时间t,给定房间中的任何两个用户都不应被分配相同的样式,并且给定用户在房间中的整个时间都应保持相同的样式,如果他们快速连续离开/重新加入(例如由于断开连接),则理想情况下应恢复相同的样式

我将使用类似Ably的工具在客户端之间推送数据

我可以使用Redis服务器端来维护用户具有何种风格的独特地图,但为了便于开发,我宁愿使用客户端

理想情况下,不同风格的数量将是低的-我不想要一堆随机的颜色,它们之间的颜色距离很小


因此,假设我有一个房间R,其中有4个随机用户user1,…,user4,我如何才能以一种很可能是唯一的且没有冲突的方式将样式分配给每个用户?

如果样式确实是颜色和线条样式的组合,那么您可以使用,或者生日悖论

让我们用N表示可能的不同样式的数量,例如,对于8种颜色和5种线型,您将有5*8=40种可能的不同样式


然后,您可以计算出,对于k个用户,他们都有不同风格的注释,您需要kThanks。这将导致大约85%的几率所有4个都是独一无二的,这是非常好的。但是5种线条样式就太多了。在一个小的移动屏幕上,大概只有大约3-4个是可分辨的。但更大的问题是如何将样式分配给客户端的userid?随机分配样式很容易,但我希望给定的用户尽可能一致地获得相同的样式。那需要一些杂凑之类的,对吗?如果新用户进入房间,我无法重新指定现有样式。但您可以使用8种以上的颜色。。。。或者找到一种方法让你的客户检查其他人正在使用的样式,以便选择另一种样式。或者更简单一点,一个客户将自己视为蓝色,将其他三个视为粉色、绿色和橙色。同意,但太多的颜色可能很难从视觉上区分,如果客户正在检查其他客户使用的颜色,那么他们需要达到某种法定人数,以便两个客户不会同时选择相同的颜色。哼。。。。在这种情况下,你将不得不进行领导人选举,这显然是在你的情况下过火了。。。。也许是服务器端的协调?
P(X) = (1 - 1/N) * (1 - 2/N) * ... * (1 - (k-1)/N) = product_{i from 1 to k-1} (1 - i/n)