小编sda*_*aau的帖子

随机"走"在有限区域的中心位置?

我不确定我是否可以正确表达这个问题,但在这里它会...

我想编写一个例子,其中小点具有根据它们移动的速度 - 而且,有一个随机运动叠加到"正确"运动.使用Processing下面的代码,我得到以下动画:

marbles.gif

右边的点应该朝向右下角,我对它的行为表现不错.问题是左点,它应该是"静态的" - 所以它只会显示"随机"运动"到位"; 但是,正如动画.gif所示,它最终会偏离其原始位置一段距离.随机速度计算如下:

this.randspeed.set(random(0,1)-0.5, random(0,1)-0.5);
Run Code Online (Sandbox Code Playgroud)

我猜想这random(0,1)-0.5不会给我一个像高斯一样的"正态分布"(或者收敛到零); 但话又说回来,即使它是一个"正确的"高斯,我仍然可以有这样的"运气",所以说,正值[0:0.5]返回一整天,然后负值[-0.5:0]第二天返回,最后,它仍然是一个合适的高斯.

所以,我想,我正在寻找一种方法将(伪?) - 随机序列(如生成的那个)转换为伪随机序列random(0,1)-0.5,但其中N个样本的平均总和(例如10)我不知道如何称之为 - 一个随机序列周期性地收敛到零,我猜?

请注意,我一直在尝试position直接改变; 和保存position与改变finalpos,而不是-改变位置似乎更像是"自然的",平滑运动(特别是与模数帧的操作,所以一个新的随机速度没有分配每帧); 但是,它还允许随机噪声累积,并将点"推"远离其中心位置.另外,请注意我花了一些时间直到我可以在.gif上重现这一点,运行程序"live"似乎导致点更快地偏离原始位置(我已经阅读了一些关于硬件事件,如硬件磁盘写入用于/dev/random在Linux上更改熵,但我真的不知道它是否相关).

另外,我想到在点位置周围设置某种虚拟边框,并对从边界出来的随机运动进行碰撞检测 - 但在我看来,这对于太多的工作(以及矢量操作的CPU周期)来说似乎是这种事; 我希望随机函数能以某种方式以一种更容易的方式"缓和",而不是.

那么,是否有建议的方法在有限区域的中心位置周围进行这种随机运动?


marbles.pde:

import java.util.*; // added for Iterator;

ArrayList<Marble> marbles = new ArrayList<Marble>();
Iterator<Marble> imarb;
color mclr = #0000FF;
int RNDLIMIT = 2;
int framecount = 0;

void setup() {
  size(600,400,P2D);
  Marble m_moving = new Marble(width/2, height/2, 2, 2);
  marbles.add(m_moving);
  Marble …
Run Code Online (Sandbox Code Playgroud)

java random algorithm math processing

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

将数据集值读入gnuplot变量(X系列的开头)

我原本以为这可能与gnuplot相同- X系列的开始 - Stack Overflow - 但我认为这稍微更具体一些.

既然我有兴趣找到"X系列的开头",可以这么说 - 我会试着用一个例子来澄清; 说你有这个脚本:

# generate data
system "cat > ./inline.dat <<EOF\n\
10.0 1 a 2\n\
10.2 2 b 2\n\
10.4 3 a 2\n\
10.6 4 b 2\n\
10.8 5 c 7\n\
11.0 5 c 7\n\
EOF\n"

# ranges 
set yrange [0:8]
set xrange [0:11.5]

plot "inline.dat" using 1:2 with impulses linewidth 2
Run Code Online (Sandbox Code Playgroud)

如果你绘制它,你会注意到数据从x轴上的10开始:

gnuplot的-startx.png

现在,当然你可以调整xrange- 但有时你会对"从0开始"的"相对位置"感兴趣,可以这么说.因此,人们希望看到数据在x轴上"向左移动",因此它从0开始.由于我们知道数据从10.0开始,我们可以明确地从第一列中减去该数据:

plot "inline.dat" using ($1-10.0):2 with impulses linewidth 2
Run Code Online (Sandbox Code Playgroud)

......这基本上就是诀窍.

但是说你不想在 …

gnuplot

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

在numpy中迭代两个没有nditer的数组?

考虑一个numpy数组规范,通常用于指定matplotlib绘图数据:

t = np.arange(0.0,1.5,0.25)
s = np.sin(2*np.pi*t) 
Run Code Online (Sandbox Code Playgroud)

基本上,这会将数据点的x坐标存储(x,y)在数组中t; 并且在数组中得到的y坐标(在这种情况下为y = f(x)的结果sin(x))s.然后,使用该numpy.nditer函数获取连续的条目对t并且s表示(x,y)数据点的坐标非常方便,如:

for x, y in np.nditer([t,s]):
  print("xy: %f:%f" % (x,y))
Run Code Online (Sandbox Code Playgroud)

所以,我正在尝试以下代码段test.py:

import numpy as np
print("numpy version {0}".format(np.__version__))
t = np.arange(0.0,1.5,0.25)   ; print("t", ["%+.2e"%i for i in t])
s = np.sin(2*np.pi*t)         ; print("s", ["%+.2e"%i for i in s])
print("i", ["% 9d"%i for i in …
Run Code Online (Sandbox Code Playgroud)

python arrays numpy multidimensional-array

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

串口环回/双工测试,用Bash还是C?(流程替代)

我有一个串行设备设置为环回(意味着它将回显它收到的任何字符),我想测量有效的吞吐速度.为此,我希望我可以使用time,如同

time bash -c '...'
Run Code Online (Sandbox Code Playgroud)

哪个' ...'将是一些我可以运行的命令.

现在,第一个问题是我想以2000000 bps的速度使用设备,所以我不能使用 ttylog屏幕(它们似乎都只能达到115200 bps).但是,使用/dev/ttyUSB0文件(使用文件重定向和cat)似乎工作正常:

# initialize serial port
stty 2000000 -ixon icanon </dev/ttyUSB0

# check settings
stty -a -F /dev/ttyUSB0

# in one terminal - read from serial port
while (true) do cat -A /dev/ttyUSB0 ; done

# in other terminal - write to serial port
echo "1234567890" > /dev/ttyUSB0

# back to first terminal, I now have:
# $ while (true) do …
Run Code Online (Sandbox Code Playgroud)

c linux bash serial-port loopback

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

Bash - 在第一次调用后在脚本中编写函数定义(作为GOTO /跳转问题)

我基本上想给我写一个bash脚本,在那里我使用heredoc生成几个大文件; 然后使用这些文件运行一些命令.

据了解,(显然)heredoc文件需要在命令运行之前生成 - 但是,在这种安排中令我恼火的是,编写命令代码之前,我还必须编写'heredoc'语句代码.

所以我以为我会在一个函数中编写heredoc语句 - 但这里仍然存在同样的问题:第24章.函数说:

函数定义必须在第一次调用之前.没有"声明"该功能的方法,例如,在C中.

的确如此:

$ cat > test.sh <<EOF
testo

function testo {
  echo "a"
}
EOF

$ bash test.sh 
test.sh: line 1: testo: command not found
Run Code Online (Sandbox Code Playgroud)

然后我想也许我可以放置一些标签并跳转GOTO,如(伪代码):

$ cat > test.sh <<EOF
goto :FUNCLABEL

:MAIN
testo

goto :EXIT

:FUNCLABEL
function testo {
  echo "a"
}
goto MAIN

:EXIT
Run Code Online (Sandbox Code Playgroud)

...但事实证明BASH goto也不存在.

我唯一的目标是 - 我想首先编写脚本文件的"核心",这是一些五六个命令; 只有然后写在脚本文件中的定界符语句(可能有数百行); 首先拥有heredocs真的让我难以阅读代码.有没有办法实现这一目标?

bash goto function

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

GCC/objdump:生成可编译/可构建的程序集(穿插在C/C++中)源代码?

这接近于使用GCC生成可读组件?,但我的上下文是avr-gcc(并相应地avr-objdump)Atmel(虽然,我想它将适用于GCC董事会).

问题是,我有一个多个.c和.cpp文件的项目; 最终被编译成可执行文件,其名称与'master'.cpp文件相同.在这个过程中,我可以通过两种方式获得汇编列表:

  • 我可以使用开关指示gcc发出汇编列表源(参见Linux汇编和反汇编和简介)-S; 在这种情况下,我得到一个文件,内容如下:
    ...
    loop:
      push r14
      push r15
      push r16
      push r17
      push r28
      push r29
    /* prologue: function /
    / frame size = 0 */
      ldi r24,lo8(13)
      ldi r22,lo8(1)
      call digitalWrite
      rjmp .L2
    .L3:
      ldi r24,lo8(MyObj)
      ldi r25,hi8(MyObj)
      call _ZN16MYOBJ7connectEv
    .L2:
      ldi r24,lo8(MyObj)
      ldi r25,hi8(MyObj)
      call _ZN16MYOBJ11isConnectedEv
    ...
    

(还没有尝试过;但我想这段代码是可编译的/可构建的....)

  • 我可以检查最终的可执行文件,并指示objdump使用该-S开关发出汇编列表源; 在这种情况下,我得到一个文件,内容如下:
    ...
    0000066a <init>:
    void init()
    { …

c assembly gcc objdump

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

使用eval初始化perl变量

我猜这对于那些了解Perl的人来说应该是显而易见的,但是我根本就没有得到它......我也猜测它与Perl范围内描述的问题有关«黑暗 - 但我不能在我的案例中应用任何问题.

无论如何,这是代码:

#!/usr/bin/env perl
# call with:
# ./test.pl

use strict;

my $tvars = "my \$varA = 1;
my \$varB = 2;
my \$varC = 3;
";

my @lines = split /\n/, $tvars;
foreach my $line (@lines) {
  print "$line\n";
  eval $line; warn $@ if $@;
}

#~ print "$varA\n"; # Global symbol "$varA" requires explicit package name at ./test.pl line 18.
#~ print "$varB\n"; # Global symbol "$varB" requires explicit package name at ./test.pl …
Run Code Online (Sandbox Code Playgroud)

variables perl scope eval

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

叠加两个postscript文件(命令行方法)?

我知道之前已经回答过类似的问题:

......但是,由于他们没有直接回答我的具体问题,我会再试一次.

 

我想知道,我如何覆盖两个postscript文件:一个 - 一个徽标:

...在另一个之上 - 图形背景:

....在Linux中使用命令行方法.

 

在此重要的是,图形背景最大程度地保留其原始内容.因此,如果我能以某种方式连接两个原始的postscript文件内容(见下文),我可能会感到最开心 - 但除此之外,我想知道命令行工具如何ghostscript用于此目的.

 

问题 - PCB上的标识.ps打印输出

这是更详细的问题 - 我想在PCB板印刷的顶部添加徽标.我kicad用来开发PCB打印; 完成后,我导出一个带有各个图层的postscript文档.通常,我希望前面的铜层"镜像"; 我经常尝试将.ps输出加载到,比方说,inkscape然后尝试在那里进行镜像.使用inkscape也很方便,因为可以在那里轻松添加徽标(然后将打印和徽标一起镜像).

然而,使用inkscape处理postscript输出是一个昂贵的操作(因为它需要一段时间inkscape来加载,并进行镜像和保存)...虽然,这里的主要显示停止是:处理后,一些维度可能会在输出文件中略微改变inkscape(当目标是打印小于1毫米宽的轨道时,它会产生很大的不同).

 

因此,假设kicads"Plot"命令有一个镜像选项 - 当然,对于我来说,直接从kicads"Plot"命令"镜像"图层打印要好得多; 输出再次是postscript文件.tmp-Front.ps是这样一个(镜像的)postscript文件的示例.请注意,通常情况下,"铜"部分填充黑色 - 我基本上喜欢在它上面有一个白色徽标.

现在,因为这个打印已经"镜像" - 如果我想在它上面添加一个徽标,我最好还要镜像徽标.所以我开火了inkscape; 和:

  • 为徽标添加文字;
  • 通过文档属性设置:
    • 文档大小与徽标大小匹配,以及
    • 该文件应具有黑色背景 …

linux command-line postscript kicad

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

使用ghostscript处理(重新映射)PDF中的缺失/有问题(CID/CJK)字体?

简而言之,我正在处理一个有问题的PDF,其中:

  • evince由于缺少字体信息,无法在文档查看器中完全呈现;
  • 但是 - ghostscript可以完全呈现​​相同的PDF.

因此 - 无论ghostscript填写空白的用途(可能是后备字形,或访问字体的不同方法) - 我希望能够ghostscript用来生成("提取")输出PDF,其中几乎除了添加的字体信息之外,什么都不会改变,因此evince可以以相同的方式呈现相同的文档ghostscript.

因此,我的问题是 - 这是否可行; 如果是这样,那么命令行会是什么样的呢?

非常感谢任何答案,
干杯!


细节:

我实际上是在一个较旧的Ubuntu 10.04,我可能正在经历 - 不是一个错误 - 但安装问题evince(缺少poppler-data包),如Bug#386008中所述"由于"未知的字体标记,某些字体无法显示. ..:"Bugs:"poppler"包:Ubuntu.

但是,这正是我想要处理的内容,因此我将使用fontspec.pdf附加到该帖子(" PDF触发错误. ",//v.)来演示问题.

evince

首先,我打开这个pdf的第3页evince; 并evince抱怨:

$ evince --page-label=3 fontspec.pdf

Error: Missing language pack for 'Adobe-Japan1' mapping
Error: Unknown font tag 'F5.1'
Error (7597): No font …
Run Code Online (Sandbox Code Playgroud)

pdf fonts ghostscript

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

什么是PostScript词典,以及如何访问它们(通过Ghostscript)?

我通常将其ghostscript视为命令行工具; 然而,我从不停止对那里存在的大量设置和选项感到惊讶 - 这是因为这ghostscript是一个完整的PostScript语言解释器(我经常忘记).

例如,在查询Ghostscript中输出设备的默认选项/设置(例如'pdfwrite'或'tiffg4') ; 一个人学习如何检索给定输出设备的默认选项.但是,我想知道的是 - 这些选项是否与所谓的PostScript词典相关?

或者,换句话说 - 什么是PostScript词典; 什么设施ghostscript有,查询(并可能)修改这些数据?

stack dictionary postscript ghostscript

7
推荐指数
3
解决办法
6406
查看次数