小编Gre*_*Cat的帖子

SVG /矢量图形对象布尔运算(并集,交集,减法)

我有2D闭合矢量路径,在SVG路径类语法中指定- 即这些路径包括直线和各种贝塞尔曲线.有没有什么像一个小的,漂亮的和离散的库(最好用C,Java或Ruby,但如果这个库干净且易于使用,任何语言都可以),它允许做这些路径的联合,交叉和减法等布尔运算?

到目前为止我发现的内容包括:

  • 巨大而昂贵的商业矢量图形产品(例如Autodesk AutoCAD或Adobe Illustrator),可以使用某种API调用或编写脚本来执行布尔2D路径操作 - 这对我来说显然是一种过度杀伤力.
  • Inkscape开发的内部lib2geom库缺少文档,绑定,有一些编译问题,似乎除了Inkscape本身之外没有任何项目使用,看起来相当复杂.
  • CGAL是一个庞大且相当复杂的计算几何库,可以在非常奇怪的对象空间中工作(即你有疯狂的模板组合,命令式样式函数来对这些模板化数据结构进行操作等),而且似乎没有除了C++之外,还有其他语言的健全绑定.Python CG绑定似乎被抛弃了,对我来说看起来并不友好.
  • JTS似乎以GIS为中心,只处理直线,而我需要处理类似SVG的Bezier曲线.

所以,问题是,是否有任何其他小巧,易用的库可以在类似SVG的路径上处理布尔运算?

c ruby java svg computational-geometry

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

重复函数调用,直到我们在Scala中得到非空的Option结果

Scala中的一个非常新手的问题 - 如何在Scala中执行"重复功能,直到返回某些内容符合我的标准"?

鉴于我有一个函数,我想调用它,直到它返回结果,例如,定义如下:

def tryToGetResult: Option[MysteriousResult]
Run Code Online (Sandbox Code Playgroud)

我想出了这个解决方案,但我真的觉得这丑陋的:

var res: Option[MysteriousResult] = None
do {
  res = tryToGetResult
} while (res.isEmpty)
doSomethingWith(res.get)
Run Code Online (Sandbox Code Playgroud)

或者,相当丑陋:

var res: Option[MysteriousResult] = None
while (res.isEmpty) {
  res = tryToGetResult
}
doSomethingWith(res.get)
Run Code Online (Sandbox Code Playgroud)

我真的觉得有一个解决方案,没有var和没有这么多麻烦手动检查是否Option是空的.

为了比较,我看到的Java替代方案在这里看起来更清晰:

MysteriousResult tryToGetResult(); // returns null if no result yet

MysteriousResult res;
while ((res = tryToGetResult()) == null);
doSomethingWith(res);
Run Code Online (Sandbox Code Playgroud)

为了增加对伤害的侮辱,如果我们不需要doSomethingWith(res)并且我们只需要从这个函数返回它,Scala vs Java看起来像这样:

斯卡拉

def getResult: MysteriousResult = {
  var res: Option[MysteriousResult] = None
  do { …
Run Code Online (Sandbox Code Playgroud)

loops scala

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

具有突破标签解释的具有挑战性的图表

我对某些产品有一些神秘的命名标签,我想用带有突破标签的图解释它们,类似于:

突破图示例

也就是说,我有一些长而神秘的标签(在这个例子中是"A-253-QZ",在现实世界中通常有8-10-12个组件),我需要解释它的部分,即"A"例如,"253"表示系列指示符,"最大速度"和"QZ"是可接受的电池类型.

我需要动态生成这些图表,所以我更喜欢用HTML + CSS进行布局.

到目前为止,我最努力的是一个复杂的表,它使用它的边框绘制这些突破线 - JSBin.它看起来像这样:

HTML表格渲染

我明白这是非常不理想的:

  • 它使用HTML表格进行格式化,这是邪恶的
  • 垂直线正确居中,但它会生成一个列的地狱
  • 水平线不与线的中心对齐,而是与线的底部对齐
  • 水平线不触及解释标题的末尾

任何想法如何做得更好/没有表/修复提到的问题?关于更好地表达概念的任何想法?

html css css3

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

Shell脚本数组

我想用循环设置数组元素:

for i in 0 1 2 3 4 5 6 7 8 9
do
array[$i] = 'sg'
done

echo $array[0]
echo $array[1]
Run Code Online (Sandbox Code Playgroud)

所以它不起作用.如何..?

linux arrays bash loops

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

带有命名参数的Java字符串模板化器/格式化程序

有没有标准或至少广泛实现的东西String.format,但有命名参数?

我想以这样的方式格式化一个模板化的字符串:

Map<String, Object> args = new HashMap<String, Object>();
args.put("PATH", "/usr/bin");
args.put("file", "foo");
String s = someHypotheticalMethod("#{PATH}/ls #{file}");
// "/usr/bin/ls foo"
Run Code Online (Sandbox Code Playgroud)

从技术上讲,它几乎与:

String[] args = new String[] { "/usr/bin", "foo" };
String s = String.format("%1$s/ls %2$s", args);
// "/usr/bin/ls foo"
Run Code Online (Sandbox Code Playgroud)

但是有了命名参数.

我知道:

但是他们都使用有序或至少编号的参数,而不是命名参数.我知道实现一个是微不足道的,但是我是否正在寻找标准Java库中的机制,或者至少在Apache Commons/Guava /类似的东西中,而不引入高调的模板引擎?

注意:我对真正的模板引擎并不感兴趣,它具有一些命令/功能逻辑,流控制,修饰符,子模板/包含,迭代器等功能.通常,以下方法是一个有效的4行实现 - 这就是我所需要的:

public static String interpolate(String format, Map<String, ? extends Object> args) {
    String out = format;
    for (String arg : args.keySet()) {
        out = Pattern.compile(Pattern.quote("#{" + arg …
Run Code Online (Sandbox Code Playgroud)

java template-engine string-formatting

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

Scala最佳实践:简单的Option []用法

作为Java-to-Scala切换器,我经常发现自己重写了处理类似的东西

val itemOpt: Option[Item] = items.get(coords) // "items" is something like a Map
if (itemOpt.isDefined) {
  val item = itemOpt.get
  // do something with item, querying item fields a lot of times, for example
  if (item.qty > 10) {
    storeInVault(item.name, item.qty, coords)
  } else {
    storeInRoom(item)
  }
}
Run Code Online (Sandbox Code Playgroud)

我想这长相丑陋,它真的看起来像Java的重写一段代码:

Item item = items.get(coords);
if (item != null) {
  // do something with item, querying item fields a lot of times, for example
}
Run Code Online (Sandbox Code Playgroud)

它在Java中看起来也很难看,但至少它只有一行.在Scala中处理这种简单案例的最佳做法是什么?我已经知道flatMapflatten处理集合 …

null scala

9
推荐指数
3
解决办法
1398
查看次数

Ruby YARD:记录抽象方法实现

我有一个典型的OO模式:一个基本抽象类(定义抽象方法)和几个以类特定方式实现这些抽象方法的类.

我习惯在抽象方法中只编写一次文档,然后它自动传播到几个具体的类(至少它在Javadoc,Scaladoc,Doxygen中以下面的方式工作),即我不需要重复相同的描述在所有具体课程中.

但是,我无法找到如何在YARD中进行此类传播.我试过,例如:

# Some description of abstract class.
# @abstract
class AbstractClass
  # Some method description.
  # @return [Symbol] some return description
  # @abstract
  def do_something
    raise AbstractMethodException.new
  end
end

class ConcreteClass < AbstractClass
  def do_something
    puts "Real implementation here"
    return :foo
  end
end
Run Code Online (Sandbox Code Playgroud)

我得到了什么:

  • 代码按预期工作 - 即throws AbstractMethodException在抽象类中调用,在具体类中完成
  • 在YARD中,AbstractClass明确定义为抽象,ConcreteClass是正常的
  • 方法描述和返回类型都很好 AbstractClass
  • 方法是说扔AbstractMethodExceptionAbstractClass
  • 方法根本没有描述和泛型Object返回类型ConcreteClass,没有一个通知表明基类中存在抽象方法.

我期望获得:

  • 方法的描述和返回类型ConcreteClass从info at 继承(即复制)到AbstractClass
  • 理想地,该方法在"继承"或"实行"的部分中指定ConcreteClass的描述中,与来自一些参考链接ConcreteClass#do_somethingAbstractMethod#do_something …

ruby documentation-generation abstract yard

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

Java中可靠的声音API,用于简单的数字样本回放

是否有一个很好的方法可以在Java中获得体面,可靠的数字采样声音播放?

我的请求列表非常简短:

  • 将数字化样本加载到内存中(例如,来自jar中捆绑的资源),例如.wav文件
  • 以非阻塞的方式播放它们
  • 当我同时播放几个样本并且它们在时间上交叉时,它们应该正确混合

拥有以下内容会很高兴,但实际上我可以没有它:

  • 从.ogg或类似的压缩格式播放(显然没有在Java中实现CPU饥饿的解码器)
  • 在播放时仍然播放相同的样本不应该停止先前播放给定的样本,但是第二个副本应该开始并与第一个正确混合

我已经尝试了臭名昭着的Java Sound API,但发现它完全不可靠,似乎无法满足我的最小愿望清单.我得到的问题:

  • 在使用ALSA dmix(OpenJDK 6)的Linux上,在初始化Java Sound API时让任何其他应用程序使用音频只会使Java应用程序中的所有声音消失而不会出现任何错误/警告.

  • 在Linux(OpenJDK 6)上,列出MixerInfos并尝试Clip使用其中任何一个获取对象时,在尝试加载wav文件时会引发以下异常:

    java.lang.IllegalArgumentException: Line unsupported: interface Clip supporting format PCM_SIGNED unknown sample rate, 16 bit, stereo, 4 bytes/frame, big-endian
    
    Run Code Online (Sandbox Code Playgroud)

    因此,AudioSystem.getClip(anySortOfMixer)似乎根本不起作用.只有AudioSystem.getClip()作品.

  • 使用不同的采样率/位/格式加载文件Clip失败LineUnavailableException.似乎第一次调用clip.open将声音系统设置为特定声音选项,在调用后加载具有略微不同采样率的文件(例如,第一个是44100,第二个是48000)

  • 在Linux(OpenJDK 6)上初始化几个不同的Clips并尝试播放它们只会使最后加载Clip声音 - 没有给出错误/警告,但只有play在最后Clip加载时才使用任何声音 - 所有其他声音都是静音的:

    Clip loadSound(String name) {
        URL url = this.getClass().getResource("/" + name + ".wav");
        Clip …
    Run Code Online (Sandbox Code Playgroud)

java openal alsa lwjgl javasound

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

Perl:现实生活中的字符串长度限制

例如,Perldata文档中Perl中的标量字符串仅受可用内存的限制,但我强烈怀疑在现实生活中会有一些其他限制.

我正在考虑以下想法:

  • 我不确定如何在Perl中实现字符串 - 是否有某种字节/字符计数器?如果有,那么很可能它的实现依赖于平台的整数(即32位或64位),因此有效地它会限制串像2 ** 31,2 ** 32,2 ** 632 ** 64字节.
  • 如果Perl不使用计数器而是使用一些字节来终止字符串(这很奇怪,因为在Perl中有一个像"foo\0bar"这样的字符串就完全没问题了),那么所有的操作都会不可避免地变得更慢.字符串长度增加.
  • Perl处理字符串的大多数字符串函数(例如长度)返回正常的标量整数,我强烈怀疑它也是平台限制的整数.

那么,在现实生活中限制Perl字符串长度的其他因素是什么?出于实际目的,应该考虑一个好的字符串长度?

string perl limit

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

Scala:转换集合,在每次迭代时产生0..many元素

给定Scala中的一个集合,我想遍历这个集合,并为每个对象发送(yield)从0到多个元素,这些元素应该连接成一个新的集合.

例如,我希望这样的事情:

val input = Range(0, 15)
val output = input.somefancymapfunction((x) => {
  if (x % 3 == 0)
    yield(s"${x}/3")
  if (x % 5 == 0)
    yield(s"${x}/5")
})
Run Code Online (Sandbox Code Playgroud)

构建一个output包含的集合

(0/3, 0/5, 3/3, 5/5, 6/3, 9/3, 10/5, 12/3)
Run Code Online (Sandbox Code Playgroud)

基本上,我想要filter(1→0..1)和map(1→1)允许的超集:映射(1→0..n).

解决方案我试过了

势在必行的解决方案

显然,在非功能性的maneer中可以这样做,例如:

var output = mutable.ListBuffer()
input.foreach((x) => {
  if (x % 3 == 0)
    output += s"${x}/3"
  if (x % 5 == 0)
    output += s"${x}/5"
})
Run Code Online (Sandbox Code Playgroud)

Flatmap解决方案

我知道flatMap,但它又是:

1)如果我们谈论任意数量的输出元素,那就变得非常难看:

val output …
Run Code Online (Sandbox Code Playgroud)

functional-programming scala scala-collections

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