小编Bem*_*mmu的帖子

查找附近点的算法?

给定一组带有x,y坐标的几百万个点,快速找到一个位置的前1000个最近点的算法是什么?"快速"在这里意味着家用电脑上大约100毫秒.

蛮力意味着进行数百万次乘法,然后对它们进行排序.虽然一个简单的Python应用程序可以在不到一分钟的时间内完成,但对于交互式应用程序来说仍然太长.

点的边界框将是已知的,因此将空间划分为简单网格是可能的.然而,点的分布有些不均匀,所以我怀疑大多数网格方块都是空的,然后突然其中一些将包含大部分点.

编辑:不必确切,实际上可能非常不准确.如果前1000名实际上只是来自前2000名的一些随机点,那就没什么大不了的了.

编辑:点集很少改变.

gis algorithm partitioning distance linear-algebra

21
推荐指数
3
解决办法
8535
查看次数

在CSS中设置字体大小时,字母的实际高度是多少?

这里有一个类似的问题,其答案实质上是:

高度 - 特别是从上升者的顶部(例如,'h'或'l'(el))到下降者的底部(例如,'g'或'y')

这也是我的经验.即14px Arial中字母的高度K(基线高度)约为10px.

规范没有说明计算的字体大小,所以我猜这是浏览器特定的,但我找不到任何引用它.

(此处此处的其他问题大致相同,但遗憾的是没有答案给出令人满意的解释..)

是否有任何文件说明为什么字体大小似乎是"从上升到下降"的大小?

css browser fonts

18
推荐指数
2
解决办法
5497
查看次数

实施实时多人游戏有哪些问题

我有一些使用套接字制作多人回合制游戏的经验,但我从未尝试过实时动作游戏.我需要处理哪些额外的问题?我是否需要保留玩家行为的历史,以防滞后的玩家在过去做些什么?我真的需要使用UDP数据包还是TCP足够?还有什么?

我还没有真正决定要做什么,但出于这个问题的目的,你可以考虑一个带有XY运动的10人2D游戏.

sockets networking udp tcp multiplayer

15
推荐指数
3
解决办法
3642
查看次数

在Python App Engine中按实体键名过滤

在Google App Engine上使用Python查询数据存储,可以使用GQL或Entity.all()然后对其进行过滤.所以例如这些是等价的

gql = "SELECT * FROM User WHERE age >= 18"
db.GqlQuery(gql)
Run Code Online (Sandbox Code Playgroud)

query = User.all()
query.filter("age >=", 18)
Run Code Online (Sandbox Code Playgroud)

现在,也可以按键名查询事物.我知道在GQL中你这样做

gql = "SELECT * FROM User WHERE __key__ >= Key('User', 'abc')"
db.GqlQuery(gql)
Run Code Online (Sandbox Code Playgroud)

但是你现在如何使用过滤器来做同样的事情呢?

query = User.all()
query.filter("__key__ >=", ?????)
Run Code Online (Sandbox Code Playgroud)

python google-app-engine google-cloud-datastore

15
推荐指数
1
解决办法
5767
查看次数

最方便的方式在iOS游戏中播放声音?

我正在制作游戏,并希望有一个游戏音乐的背景循环,并且它有两个不同的声音效果通道.我想控制这些频道的音量.我看了fmod,但这超出了我的预算.现在,我正在查看Apple提供的MixerHostAudio示例.这是一个明显的例子,但有点啰嗦是1000多行只是为了播放两个声音,所以我想知道我是否应该做其他事情.

我理想的API看起来像这样:

SoundSystem *sounds = [SoundSystem soundSystemWithLoop:@"koto.mp3"]; 
[sounds play:@"chimes.mp3" channel:1 looping:YES volume:0.0];
[sounds fadeTo:1.0 channel:1 delay:0.5];
[sounds play:@"buddha_bell.mp3" channel:2];
Run Code Online (Sandbox Code Playgroud)

iphone audio ios

12
推荐指数
2
解决办法
9664
查看次数

在未更改的实体上避免使用.put()的优雅方法

我在GAE上的Python编程中重现的模式是从数据存储中获取一些实体,然后可能根据各种条件更改该实体.最后,我需要将.put()实体返回到数据存储,以确保可以保存对其进行的任何更改.

然而,实际上通常没有进行任何更改,最终的.put()只是浪费金钱.如果真的发生变化,如何轻松确定我只放了一个实体?

代码可能看起来像

def handle_get_request():
    entity = Entity.get_by_key_name("foobar")

    if phase_of_moon() == "full":
       entity.werewolf = True
    if random.choice([True, False]):
       entity.lucky = True
    if some_complicated_condition:
       entity.answer = 42

    entity.put()
Run Code Online (Sandbox Code Playgroud)

如果任何条件改变了实体,我可以保持一个"已更改"的标志,但这似乎非常脆弱.如果我忘记将它设置在某个地方,那么更改将会丢失.

我最终使用了什么

def handle_get_request():
    entity = Entity.get_by_key_name("foobar")
    original_xml = entity.to_xml()

    if phase_of_moon() == "full":
       entity.werewolf = True
    if random.choice([True, False]):
       entity.lucky = True
    if some_complicated_condition:
       entity.answer = 42

    if entity.to_xml() != original_xml: entity.put()
Run Code Online (Sandbox Code Playgroud)

我不会称之为"优雅".优雅的是,如果对象最终自动保存自己,但我觉得这很简单,可读性足以做到现在.

python google-app-engine

12
推荐指数
1
解决办法
337
查看次数

当cURL数据> 1024时,PHP HTTP POST失败

注意:最后的解决方案

如果我尝试执行超过1024个字符的HTTP POST,则会失败.为什么?这是一个最小的例子:

recipient.php:

<?php
if (strlen(file_get_contents('php://input')) > 1000
    || strlen($HTTP_RAW_POST_DATA) > 1000) {
 echo "This was a triumph.";
}
?>
Run Code Online (Sandbox Code Playgroud)

sender.php:

<?php
function try_to_post($char_count) {
 $url = 'http://gpx3quaa.joyent.us/test/recipient.php';
 $post_data = str_repeat('x', $char_count);
 $c = curl_init();
 curl_setopt_array($c,
                    array(  CURLOPT_URL => $url,
                            CURLOPT_HEADER => false,
                            CURLOPT_CONNECTTIMEOUT => 999,
                            CURLOPT_RETURNTRANSFER => true,
                            CURLOPT_POST => 1,
                            CURLOPT_POSTFIELDS => $post_data
                    )
 );
 $result = curl_exec($c);
 echo "{$result}\n";
 curl_close($c);
}

for ($i=1020;$i<1030;$i++) {
 echo "Trying {$i} - ";
 try_to_post($i);
}
?>
Run Code Online (Sandbox Code Playgroud)

输出:

Trying 1020 - …
Run Code Online (Sandbox Code Playgroud)

php post curl http

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

'NSInternalInconsistencyException',原因:' - [UIViewController _loadViewFromNibNamed:bundle:]加载了GameView笔尖,但未设置视图插座

这与此处众多其他类似问题的情况不同.

*由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:' - [UIViewController _loadViewFromNibNamed:bundle:]加载了GameView笔尖,但未设置视图插座.

您可能会想"按照它说的那样,将文件所有者连接到IB中的视图!".但问题是,我甚至在项目中甚至在项目目录中都没有GameView.xib.

我的项目中有一个"GameViewController.m"和匹配的"GameViewController.xib".使用GameViewController会出现这个错误,但我不明白尝试加载"GameView.xib"的想法.它不应该使用"GameViewController.xib"吗?


如果我grep我的项目目录,我确实看到它引自"UserInterfaceState.xcuserstate".

<string>file://localhost/Users/bemmu/Dropbox/b2/iphone/ValleyStory/ValleyStory/GameView.xib</string>
Run Code Online (Sandbox Code Playgroud)

这个提到的文件不存在.我之前可能有一个带有该名称的文件,并重命名/删除它,但它没有被我在IB中看到的任何地方引用.

我设法混淆了xcode吗?

iphone interface-builder xcode4

11
推荐指数
3
解决办法
3万
查看次数

通过等距瓷砖的通道

在此输入图像描述 在此输入图像描述 在此输入图像描述 在此输入图像描述

上面是从右下方向左上方沿着地面行走的角色的四个图像.您可以在第三个面板中看到绘图顺序不正确.

这里似乎没有"正确的顺序".例如,如果不是一个小家伙,我们有一只偷猫的精灵穿过门,那么无论你是先把门还是先把猫拉出来,都是错的.

在此输入图像描述 在此输入图像描述

其他游戏引擎如何处理这个?一些黑客可以防止这种情况发生?手工绘制z缓冲区?还有其他选择没有发生在我身上吗?

graphics isometric

9
推荐指数
1
解决办法
758
查看次数

按字母/词典顺序排列的两个字符串的平均值

假设你取字符串'a'和'z'并按字母顺序列出它们之间的所有字符串:['a','b','c'...'x','y','z "].从这个列表的中点开始,你会发现'm'.所以这有点像取两个字符串的平均值.

您可以将其扩展为具有多个字符的字符串,例如,'aa'和'zz'之间的中点可以在列表中间找到['aa','ab','ac'...'zx ','zy','zz'].

可能在某处有一个Python方法可以做到这一点吗?如果没有,即使知道算法的名称也会有所帮助.

我开始制作我自己的例程,简单地通过两个字符串并找到第一个不同字母的中点,这似乎在'aa'和'az'中点是'am'时工作得很好,但是然后它在'cat'上失败了,它认为是'c'的'小狗'中点.我尝试使用谷歌搜索"二进制搜索字符串中点"等但不知道我在这里尝试做什么的名称我没有运气.

我添加了自己的解决方案作为答案

python algorithm

8
推荐指数
3
解决办法
2097
查看次数