我正在寻找一种快速算法来绘制具有一定厚度的线条.线路不必抗锯齿,速度优先.像这样简单的东西就足够了:

用例是一个Javascript游戏,其中蠕虫留下痕迹.(HTML5 Canvas显然会绘制线条,但getImageData()非常慢,因此碰撞检测也是如此)
在过去的2.5小时里,我找不到任何可以做到这一点的事情.是的,我知道在SO上几乎有相同的问题,实际上有很多问题,但没有一个问题有一个可行的解决方案.我目前唯一的解决方案是沿着Bresenham线绘制圆圈,这不是很有效.
一些代码(伪代码,JS或至少是文章的链接)会很棒.
我正在尝试创建一个系统,该系统能够找到具有相似喜爱的电影/书籍/兴趣/等的用户,就像last.fm 上的邻居一样。具有最多共同兴趣的用户将具有最高的匹配度,并将显示在用户个人资料中(5 个最佳匹配左右)。
有没有相当快的方法来做到这一点?显而易见的解决方案是创建一个包含用户 id 和兴趣 id 的表,并将一个用户与所有其他用户进行比较,但这在一个表上需要很长时间......假设百万个用户每个都有 20 个兴趣。
我认为存在一些有效的解决方案,因为 last.fm 运行得很好。我更喜欢使用一些常见的 SQL 数据库,如 mySQL 或 pgSQL,但任何东西都可以。
感谢您的建议。
更新:
事实证明,最大的问题是在 SQL 数据库中查找最近邻居,因为没有一个开源数据库支持这种搜索。
所以我的解决方案是修改 ANN 以作为服务运行并从 PHP 查询它(例如使用套接字)——甚至拥有数百万用户,内存中有 7 个维度也没什么大不了的,而且运行速度快得令人难以置信。
针对较小数据集的另一个解决方案是这个简单的查询:
SELECT b.user_id, COUNT(1) AS mutual_interests
FROM `users_interests` a JOIN `users_interests` b ON (a.interest_id = b.interest_id)
WHERE a.user_id = 5 AND b.user_id != 5
GROUP BY b.user_id ORDER BY mutual_interests DESC, b.user_id ASC
Run Code Online (Sandbox Code Playgroud)
20-50 毫秒,10 万用户平均每个用户有约 20 个兴趣(10 000 个可能的兴趣)