小编Spe*_*tre的帖子

图像到ASCII艺术转换

序幕

这个主题不时出现在SO上,但通常是因为写得不好的问题而被删除.我看到很多这样的问题,然后在请求附加信息时从OP(通常的低代表)中沉默.如果输入对我来说足够好,我决定回答一个问题,它通常会在活动时每天获得一些投票,但几周之后问题就会被删除/删除,并且所有问题都从一开始就开始.所以我决定写这个Q&A所以我可以直接引用这些问题,而不会一遍又一遍地重写答案......

另一个原因也是这个META线程针对我,所以如果你有额外的输入随意评论.

如何使用C++将位图图像转换为ASCII艺术

一些限制:

  • 灰度图像
  • 使用单倍间距字体
  • 保持简单(不要为初级程序员使用太高级的东西)

这是一个相关的Wiki页面ASCII艺术(感谢@RogerRowland)

c++ 2d bitmap image-processing ascii-art

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

如何在更高维度的超球面上均匀分布点?

我对在尺寸为3或更高的球面上均匀分布N个点感兴趣。

更加具体:

  • 给定多个点N和多个维D(其中D> 1,N> 1)
  • 每个点到原点的距离必须为1
  • 两点之间的最小距离应尽可能大
  • 每个点到它最近的邻居的距离不必对于每个点都相同(实际上,除非点的数量形成柏拉图式实体的顶点,或者如果N <= D,则不可能相同。 )。

我对以下内容不感兴趣:

  • 在超球面上创建均匀的随机分布,因为我希望任意两点之间的最小距离尽可能大而不是随机分布。
  • 粒子排斥模拟类型的方法,因为它们难以实现并且需要花费很长的时间才能运行较大的N(理想情况下,该方法应该是确定性的,并且以O(n)为单位)。

满足这些条件的一种方法称为斐波那契晶格,但我只能在2d和3d中找到该方法的代码实现。

斐波纳契晶格(也称为斐波纳契螺旋)背后的方法是生成绕球体表面成螺旋形的一维线,以使该线所覆盖的表面积每转大致相同。然后,您可以丢掉均匀分布在螺旋上的N个点,它们将大致均匀地分布在球体的表面上。

此答案中,有一个针对3个维度的python实现,可生成以下内容:

在此处输入图片说明

我想知道斐波那契螺旋是否可以扩展到大于3的尺寸,并在数学堆栈交换中发布了一个问题。令我惊讶的是,我收到了两个令人惊讶的答案,据我所知(因为我不完全理解所显示的数学)表明确实有可能将该方法扩展到N维。

不幸的是,我对所显示的数学知识还不够了解,无法将任何一个答案都转换成(伪)代码。我是一位经验丰富的计算机程序员,但是我的数学背景仅此而已。

我将复制我认为是以下答案之一最重要的部分(不幸的是,SO不支持mathjax,因此我必须复制为图像)

在此处输入图片说明

我遇到的上述困难:

  • 如何解析用于?n的反函数?
  • 给出的示例是d = 3的。如何为任意d生成公式?

在座的任何人都可以理解所涉及的数学知识,从而能够朝着链接斐波那契晶格问题的任一答案的伪代码实现取得进展?我知道完整的实施可能很困难,因此我对部分实施感到满意,该实施可以使我足够自己完成其余的工作。

为简化起见,我已经编写了一个函数,该函数将N个维度的球面坐标转换为笛卡尔坐标,因此该实现可以输出任意一个,因为我可以轻松进行转换。

另外,我看到一个答案为每个附加维使用下一个质数。我可以轻松地编写一个输出每个连续素数的函数,因此可以假定已经实现了。

如果未能在N个维度上实现斐波那契晶格,我很乐意接受满足上述约束的另一种方法。

math geometry pseudocode

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

转换浮点数的基数而不会丢失精度

术语

在这个问题中,我称之为"浮点数""十进制数",以防止使用float/ doubleJava原始数据类型进行ambiguation .术语"十进制"与"基数10"无关.

背景

我用这种方式表示任何基数的十进制数:

class Decimal{
    int[] digits;
    int exponent;
    int base;
    int signum;
}
Run Code Online (Sandbox Code Playgroud)

它大致表达了这个double值:

public double toDouble(){
    if(signum == 0) return 0d;
    double out = 0d;
    for(int i = digits.length - 1, j = 0; i >= 0; i--, j++){
        out += digits[i] * Math.pow(base, j + exponent);
    }
    return out * signum;
}
Run Code Online (Sandbox Code Playgroud)

我知道有些转换是不可能的.例如,无法转换0.1 (base 3)为基数10,因为它是重复的小数.类似地,转换0.1 (base 9)到基础3是不可能的,但是可以进行协调0.3 (base 3).可能还有其他一些我没有考虑过的案例.

传统的方式

对于整数,从基数10到基数2的基数变化的传统方式(手动)是将数字除以2的指数,并且从基数2到基数10将数字乘以2的相应指数.从基数x变为基数 …

java algorithm math decimal-point base

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

快速bignum平方计算

为了加快我的bignum除数,我需要加速y = x^2bigints的操作,bigints被表示为无符号DWORD的动态数组.要明确:

DWORD x[n+1] = { LSW, ......, MSW };
Run Code Online (Sandbox Code Playgroud)
  • 其中n + 1是使用的DWORD的数量
  • 所以数量的价值 x = x[0]+x[1]<<32 + ... x[N]<<32*(n)

问题是:如何在y = x^2没有精度损失的情况下尽快计算? - 使用C++和整数算术(32位带Carry)处理.

我目前的方法是应用乘法y = x*x并避免多次乘法.

例如:

x = x[0] + x[1]<<32 + ... x[n]<<32*(n)
Run Code Online (Sandbox Code Playgroud)

为简单起见,让我重写一下:

x = x0+ x1 + x2 + ... + xn
Run Code Online (Sandbox Code Playgroud)

其中index表示数组内的地址,因此:

y = x*x
y = (x0 + x1 + x2 + ...xn)*(x0 + x1 + x2 + ...xn)
y = x0*(x0 …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm multiplication bignum sqr

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

以编程方式删除图像中的所有线条和边框(保留文本)的方法是什么?

我正在尝试使用Tesseract OCR从图像中提取文本.目前,使用原始输入图像(如下所示),输出质量很差(约50%).但是当我尝试删除输入图像中的所有线条和边框(使用photoshop)时,输出提高了很多(~90%).那么有没有办法以编程方式删除图像中的所有线条和边框(保留文本)(使用OpenCV,Image magick,..)?

原始图片: 原始图像

期待图片: 期待形象

opencv tesseract image imagemagick image-processing

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

如何将文件上传到lambda函数或API网关?

我尝试将文件从iOS上传到AWS API网关并通过它传递给Lambda函数,我该如何实现这种情况?

我可以使用multipart/form-data上传到AWS API Gateway但是如何使输入Model支持二进制数据?

[Edit1]从Spektre的回答中移开

谢谢对于响应,经过一些阅读后我发现无法将文件上传到lambda(并且它不合逻辑因为它是基于事件的)并且是上传到S3并使S3通知lambda的唯一有效用例.

amazon-web-services ios aws-lambda aws-api-gateway

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

Modular arithmetics and NTT (finite field DFT) optimizations

I wanted to use NTT for fast squaring (see Fast bignum square computation), but the result is slow even for really big numbers .. more than 12000 bits.

So my question is:

  1. Is there a way to optimize my NTT transform? I did not mean to speed it by parallelism (threads); this is low-level layer only.
  2. Is there a way to speed up my modular arithmetics?

This is my (already optimized) source code in C++ for NTT (it's complete …

c++ optimization performance modular-arithmetic ntt

10
推荐指数
1
解决办法
2804
查看次数

如何在OpenGL中实现没有重复顶点的平面着色?

我正在尝试使用平面着色在 LWJGL OpenGL 中渲染 3D 棱镜。例如,我有一个索引如下的多维数据集:

在此输入图像描述

我的顶点缓冲区中只有 8 个顶点,我已按上述方式对其进行了索引。有没有办法在立方体上实现平坦的法线着色,如下所示?如果可能的话,我不想重写我的顶点和索引缓冲区以包含重复的顶点。

opengl shader glsl lwjgl n-dimensional

10
推荐指数
1
解决办法
7763
查看次数

OpenGl 模糊

我正在使用 libgdx,想要制作一个常见的高斯模糊后处理效果。按照指南,我遇到了纹理过滤的一些问题。这里是图像:

实际图像:

实际图像

半径 = 1 时模糊:

半径 = 1 时模糊

半径 = 5 进行模糊处理:

半径 = 5 时模糊

在最简单的情况下,我只有一个透明的帧缓冲区对象,其中渲染了一些对象。然后我需要对此应用一些着色器效果,基本上只是模糊,然后将结果渲染到屏幕上。我还想调整模糊半径,但如果我将半径设置为大于 1,它就会看起来非常粗糙。我猜它应该与一些线性过滤一起使用,但它不在这里。所以我只需要应用相同的效果与软模糊和可配置的半径,也许还有一些其他着色器侧选项。我还尝试将线性过滤显式分配给 FBO 纹理,这不会改变任何内容。

片段着色器:

//"in" attributes from our vertex shader
varying vec4 vColor;
varying vec2 vTexCoord;

//declare uniforms
uniform sampler2D u_texture;
uniform float resolution;
uniform float radius;
uniform vec2 dir;

void main() {
    //this will be our RGBA sum
    vec4 sum = vec4(0.0);
    
    //our original texcoord for this fragment
    vec2 tc = vTexCoord;
    
    //the amount to blur, i.e. how far off center to sample from 
    //1.0 …
Run Code Online (Sandbox Code Playgroud)

opengl shader glsl

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

如何计算大数的正弦

一连几天,我一直在想,怎么会是可能的周围幅度计算庞大的数字的正弦100000!(弧度).阶乘只是一个例子,数字本身可以是任何不仅仅是一个因子产品...)我显然不使用doublecpp_rational来自boost multiprecision库.但我不能简单地做100000! mod 2pi,然后使用内置函数sinl(我不需要超过10位十进制数字..)因为我需要数百万的pi数字来准确地做到这一点.

有没有办法实现这个目标?

c++ math boost trigonometry

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