小编Arc*_*gon的帖子

C++中的线性方程组?

我需要在程序中解决线性方程组.是否有一个简单的C++线性代数库,最好只包含几个标题?我一直在寻找近一个小时,我发现的所有内容都需要弄乱Linux,在MinGW中编译DLL等等.(我正在使用Visual Studio 2008.)

c++ linear-algebra

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

将两个视频叠加到静态图像上?

我有两个视频,我想将它们组合成一个视频,其中两个视频都位于静态背景图像之上.(认为像这样).我的要求是,我使用的软件是免费的,它运行在OSX,而我不必重新编码我的影片的次数过多的.我也希望能够从命令行或通过脚本执行此操作,因为我会做很多事情.(但这不是绝对必要的.)

我尝试用ffmpeg摆弄几个小时,但它似乎不太适合后期处理.我可能通过叠加功能一起破解某些东西,但到目前为止我还没有弄清楚如何做到这一点,除了痛苦 - 将图像转换为视频(这需要2倍于我的视频长度!)然后在另一个渲染步骤中将两个视频叠加到它上面.

有小费吗?谢谢!


更新:

感谢LordNeckbeard的帮助,我通过一个ffmpeg电话就能达到我想要的结果!不幸的是,编码速度非常慢,需要6秒才能编码1秒的视频.我相信这是由背景图片引起的.有关加速编码的任何提示?这是ffmpeg日志:

MacBook-Pro:Video archagon$ ffmpeg -loop 1 -i underlay.png -i test-slide-video-short.flv -i test-speaker-video-short.flv -filter_complex "[1:0]scale=400:-1[a];[2:0]scale=320:-1[b];[0:0][a]overlay=0:0[c];[c][b]overlay=0:0" -shortest -t 5 -an output.mp4
ffmpeg version 1.0 Copyright (c) 2000-2012 the FFmpeg developers
  built on Nov 14 2012 16:18:58 with Apple clang version 4.0 (tags/Apple/clang-421.0.60) (based on LLVM 3.1svn)
  configuration: --prefix=/opt/local --enable-swscale --enable-avfilter --enable-libmp3lame --enable-libvorbis --enable-libopus --enable-libtheora --enable-libschroedinger --enable-libopenjpeg --enable-libmodplug --enable-libvpx --enable-libspeex --mandir=/opt/local/share/man --enable-shared --enable-pthreads --cc=/usr/bin/clang --arch=x86_64 --enable-yasm --enable-gpl --enable-postproc --enable-libx264 --enable-libxvid
  libavutil      51. 73.101 / 51. …
Run Code Online (Sandbox Code Playgroud)

video ffmpeg video-processing command-line-tool video-encoding

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

如何从凹陷的Delaunay三角剖分中切出三角形?

我正在使用Delaunay来对凹多边形进行三角测量,但它会填充凹陷.如何自动删除多边形边界外的三角形?

polygon delaunay concave triangulation

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

2D平台:为什么物理依赖于帧速率?

"超级肉食男孩"是一款最近出现在PC上的难度平台游戏,需要出色的控制和像素完美的跳跃.游戏中的物理代码取决于帧率,锁定为60fps; 这意味着如果你的计算机无法全速运行游戏,那么物理将变得疯狂,导致(除其他外)你的角色跑得更慢并且从地面掉落.此外,如果vsync关闭,游戏运行速度非常快.

那些有2D游戏编程经验的人能帮助解释为什么游戏是用这种方式编码的吗?以恒定速率运行的物理循环不是更好的解决方案吗?(实际上,我认为物理循环用于游戏的某些部分,因为无论帧速率如何,某些实体都会继续正常移动.另一方面,你的角色运行速度恰好[fps/60].)

令我困惑的是这个实现是游戏引擎和图形渲染之间的抽象丢失,这取决于系统特定的东西,如显示器,图形卡和CPU.无论出于何种原因,如果您的计算机无法处理vsync,或者无法以60fps的速度运行游戏,那么它将会非常突破.为什么渲染步骤会以任何方式影响物理计算?(现在大多数游戏要么放慢游戏速度,要么跳过帧.)另一方面,我知道NES和SNES上的老式平台游戏依赖于固定帧速率来控制和物理.为什么会这样,并且可以在没有帧率依赖性的情况下创建一个变形器?如果将图形渲染与引擎的其余部分分开,是否一定会损失精度?

谢谢你,如果这个问题令人困惑,那就很抱歉.

graphics 2d game-physics

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

痛苦地减慢软件向量,特别是CoreGraphics与OpenGL

我正在开发一个iOS应用程序,需要实时绘制Bézier曲线以响应用户的输入.起初,我决定尝试使用CoreGraphics,它具有出色的矢量绘图API.然而,我很快就发现性能很痛苦,极其缓慢,在我的视网膜iPad上只有一条曲线,帧速率开始严重下降.(不可否认,这是一个代码效率低下的快速测试.例如,曲线每帧都重新绘制.但是今天的计算机确实足够快,每隔1/60秒处理一条简单的曲线,对吧?!)

在这个实验之后,我切换到OpenGL和MonkVG库,我感到非常高兴.我现在可以在没有任何帧速率下降的情况下同时渲染HUNDREDS曲线,对保真度的影响很小(对于我的用例).

  1. 我是否有可能以某种方式滥用CoreGraphics(至少比OpenGL解决方案慢几个数量级),还是表现真的那么可怕?我的预感是问题在于CoreGraphics,基于StackOverflow /论坛问题的数量以及有关CG性能的答案.(我已经看到有几个人声称CG并不意味着进入一个运行循环,并且它只应该用于不频繁的渲染.)从技术上讲,为什么会这样呢?
  2. 如果CoreGraphics真的那么慢,Safari究竟如何顺利地工作?我的印象是Safari不是硬件加速的,但它必须同时显示数百个(如果不是数千个)矢量字符而不丢弃任何帧.
  3. 更一般地说,如果没有硬件加速,使用重载矢的应用程序(浏览器,Illustrator等)如何保持如此快速?(据我所知,许多浏览器和图形套件现在都带有硬件加速选项,但默认情况下它通常不会打开.)

更新:

我编写了一个快速测试应用程序来更准确地衡量性能.下面是我的自定义CALayer子类的代码.

将NUM_PATHS设置为5并将NUM_POINTS设置为15(每个路径5个曲线段),代码在非视网膜模式下以20fps运行,在iPad 3上以视网膜模式运行6fps.分析器将CGContextDrawPath列为拥有96%的CPU时间.是的 - 显然,我可以通过限制我的重绘矩形进行优化,但如果我真的需要60fps的全屏矢量动画呢?

OpenGL在早餐时吃这个测试.矢量绘图怎么可能这么慢?

#import "CGTLayer.h"

@implementation CGTLayer

- (id) init
{
    self = [super init];
    if (self)
    {
        self.backgroundColor = [[UIColor grayColor] CGColor];
        displayLink = [[CADisplayLink displayLinkWithTarget:self selector:@selector(updatePoints:)] retain];
        [displayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes];
        initialized = false;

        previousTime = 0;
        frameTimer = 0;
    }
    return self;
}

- (void) updatePoints:(CADisplayLink*)displayLink
{
    for (int i = 0; i < NUM_PATHS; i++)
    {
        for (int j = 0; j < NUM_POINTS; …
Run Code Online (Sandbox Code Playgroud)

opengl-es core-graphics vector-graphics openvg ios

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

为什么NSTableView会在滚动时重绘每个单元格?

我有一个包含5列的NSTableView,每列包含nib中的库存NSTableCellView.(库存单元格有一个文本框和一个可选图像.)填充后,表格大约有50行.一切都很好,但滚动表现非常糟糕.看起来这种情况正在发生,因为每当表格滚动时,每个单元格都会获得一个drawRect:消息,表示其完整的rect.但是,reloadData和reloadDataForRowIndexes:ColumnIndexes:都没有被调用,所以不是这样.它也不是单元格的内容:我试着将我的所有代码都注释掉,只留下每个单元格的默认单元格图像和文本,性能也是一样的.滚动时,没有任何单元格更新.(我在tableView中设置了一个断点:viewForTableColumn:row:以确保.)

我的实现有以下委托方法:

  • tableView:viewForTableColumn:row:在委托中; 这将通过makeViewWithIdentifier:owner创建并填充新单元格:
  • numberOfRowsInTableView:在数据源中; 这将返回一个常数
  • tableView:sortDescriptorsDidChange:在数据源中

而已!还不是很复杂.

我觉得我错过了一些完全明显的东西.什么可能导致这些重绘?


编辑:想想看,其他几个应用程序(uTorrent,Xcode)似乎表现出相同的慢滚动行为.如果你在滚动时查看CPU使用情况,你真的可以看到它.另一方面,活动监视器具有黄油般平滑的滚动功能,根本不会对CPU造成任何影响.我如何在我的应用程序中获得它?


编辑2:我想我发现了自己的错误.根据Apple的说法:

在iOS应用程序中,始终启用Core Animation,每个视图都由一个图层支持.在OS X中,应用必须通过执行以下操作明确启用Core Animation支持:

  • 链接QuartzCore框架.(iOS应用必须仅在明确使用Core Animation接口时才链接此框架.)
  • 通过执行以下操作之一,为一个或多个NSView对象启用图层支持:

    • 在nib文件中,使用View Effects检查器为视图启用图层支持.检查器显示所选视图及其子视图的复选框.建议您尽可能在窗口的内容视图中启用图层支持.
    • 对于以编程方式创建的视图,请调用视图的setWantsLayer:方法并传递值YES以指示视图应使用图层.

以上述方式之一启用图层支持会创建一个图层支持的视图.使用图层支持的视图,系统负责创建底层图层对象并保持更新该图层.在OS X中,还可以创建图层托管视图,从而您的应用程序实际创建和管理基础图层对象.(您无法在iOS中创建图层托管视图.)有关如何创建图层托管视图的详细信息,请参阅"图层托管允许您更改OS X中的图层对象".

我会在解决性能问题后立即添加答案.通过粗略的传递,我的滚动仍然颠簸,但滚动时我的CPU使用率从70%下降到10%.

macos cocoa scroll nstableview

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

Logoot CRDT:将并发编辑的数据交错到同一位置?

我想实现Logoot最终收敛的P2P文本编辑,我遇到了一些问题.

我对Logoot的理解是,对象之间的间隔(原始文件中的文本行,但可以是字符或单词)可以根据无界标识符无限划分.这意味着对象的位置不是由其邻居确定的,如在WOOT中(这将需要墓碑),而是由沿着字符串长度的固定数字点确定.结合唯一的站点标识符,这也为我们提供了一个总订单,并实现了最终的融合.

但是......当对同一个点进行并发编辑时,这不会导致问题吗?如果两个断开连接的客户端开始在相同的光标位置写入新的句子然后合并,则他们的句子很有可能进行交错.

下面是我正在谈论的白板示例:

白板

如您所见,站点B和站点C根据Logoot的规则划分"I"和"conquered"之间的间隔,给出了(20,A)和(25,A)位置之间的随机点.但是没有任何东西相对于彼此命令这些点,导致它们在合并时混合.同时,基于邻居的算法可以解决这个问题,因为保留了每个对象的因果链.

以上是一个婴儿示例,但在更一般的情况下,想象一下,如果两个用户想要在两个现有句子之间插入不同的句子.如果其中一个用户碰巧离线,他们不应该回到乱七八糟的混乱!显然,为了保持意图,一句话应该跟随另一句话.

我在阅读论文时遗漏了什么,或者这是Logoot的内在缺点?

(另外,为什么在算法中似乎没有使用记录的时钟值?本文甚至指出每个对象的标识符在没有时钟的情况下必然是唯一的.)

algorithm concurrency text-editor convergence crdt

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

2D基于图块的引擎中的OpenGL行为:运动时像素"捕捉",逼近错误?

让我看看我是否可以清楚地问这个问题:

我正在OpenGL ES中编写一个基于2D磁贴的引擎,目的是让它看起来像一个老式的光栅引擎.我的艺术资产都是原始分辨率(也就是说,1:1像素艺术)并映射到矩形多边形,我的OpenGL视图是正交的,并且跨越矩形(0.0,0.0)到(screen.width,screen.height) ).我这样做是希望显示器上的每个像素都对应于XY坐标平面中的"虚拟"像素正方形,而这个正方形对应于我的一个贴片上的像素.(瓷砖是16.0 x 16.0,我的世界的起源显然是[0.0,0.0].)

由于近似误差,我确信我的引擎看起来很"假".例如,我认为由于平铺像素没有直接写入显示器,因此偶尔会获取不正确的像素.我也确信只要瓷砖未与实际显示像素对齐,相机运动就会导致OpenGL进行插值.

事实证明,OpenGL的行为几乎与栅格引擎完全相同.当相机静止时,每个虚拟像素完全对应于显示器上的像素.当相机处于运动状态时,图块一次"捕捉"一个像素行/列,而不是通过插值平滑移动.(即使动作非常缓慢,也会发生这种情况.)出于好奇,我尝试将我的瓷砖缩放到1.1x,正如我预期的那样,它们开始看起来很泥泞并且捕捉行为停止了.那么,OpenGL的行为是否正确,取决于它渲染的东西是否可以与显示器完美对齐?

我可以在规范中找到有关这些问题的信息,以及如何确保OpenGL继续以这种方式运行?我觉得使用我不太了解的默认值会感到不舒服,因为这种行为在理论上可以随时改变.

谢谢!

opengl-es raster

5
推荐指数
1
解决办法
1164
查看次数

Objective-C中的无状态静态方法与C函数

就良好的Objective-C编码实践而言,如果我创建一个没有状态的函数,将它编写为某个类的静态方法还是作为C函数更好?

例如,我有一个特殊的文件路径检索方法,在进入主NSBundle之前检查Caches目录.我目前在一个空的Utils类下将它作为静态方法.这应该是C函数吗?

我选择使用静态方法(目前)的原因是:a)它与Objective-C语法一致,b)该类有助于对方法进行分类.但是,我觉得我有点作弊,因为我可以轻松地用这些无状态静态方法填充我的Util类,最终得到一个丑陋的"shell类",其唯一的目的就是持有它们.

你用什么约定?通过一些客观指标,一个比另一个"更好"吗?谢谢!

static-methods coding-style objective-c

5
推荐指数
1
解决办法
791
查看次数

Tetromino空间填充:需要检查是否可能

我正在编写一个程序,需要快速检查连续的空间区域是否可以被四格骨牌(任何类型、任何方向)填充。我的第一次尝试是简单地检查平方数是否能被 4 整除。但是,这样的情况仍然可能会出现:

\n\n

不可能的空间1.\n不可能的空间2

\n\n

正如您所看到的,即使这些区域每个都有 8 个方格,它们也不可能用四格骨牌平铺。

\n\n

我想了一会儿,但不知道如何继续。在我看来,“枢纽”广场,或者通向两个以上“隧道”的广场,是关键。在上面的示例中很容易,因为您可以快速计算每个此类隧道 \xe2\x80\x94 3、1 和 3 在第一个示例中的空间,以及在第二个示例中的 3、1、1 和 2 \xe2\x80\x94 并确定不可能继续进行,因为每个隧道都需要连接到中心广场以安装四格骨牌,而这对于所有隧道来说都是不可能发生的。但是,您可以有更复杂的示例,如下所示:

\n\n

不可能的空间3.

\n\n

...简单的计数技术根本不起作用。(至少,据我所知。)更不用说更多的开放空间和很少数量的中心广场了。另外,我没有任何证据表明中心方块是这里唯一的技巧。据我所知,可能还有很多其他不可能的情况。

\n\n

某种搜索算法(A*?)是解决这个问题的最佳选择吗?我非常关心数百甚至数千个方块的性能。该算法需要非常高效,因为它将用于实时平铺(或多或少),并且在浏览器中。

\n

algorithm math search tiling tetris

5
推荐指数
1
解决办法
1834
查看次数