javascript

java

python

c#

node.js

android

reactjs

c++

php

jquery

html

css

git

ruby-on-rails

.net

ios

sql

c

string

ruby

语言不可知-流利的接口是否违反Demeter定律?

维基百科上有关Demeter定律的文章说:

可以简单地将法律表述为“仅使用一个点”。

但是,流利接口的一个简单示例如下所示:

static void Main(string[] args)
{
   new ZRLabs.Yael.Pipeline("cat.jpg")
        .Rotate(90)
        .Watermark("Monkey")
        .RoundCorners(100, Color.Bisque)
        .Save("test.png");
}

那么,这在一起吗?

trans by 2019-10-15T08:40:34Z

有没有一种可以像混色一样工作的混色算法?

RGB颜色的常见混合与绘画的混合颜色有很大不同,它是光的混合而不是颜料的混合。

例如:

Blue (0,0,255) + Yellow (255,255,0) = Grey (128,128,128)

(应该是蓝色+黄色=绿色)

是否有任何已知的颜色混合算法可以像混合真实颜色一样工作?


我的方法

我已经尝试过以下操作:

将两种颜色都转换为HSV并混合色相(乘以从饱和度计算得出的系数),以及饱和度和价值渠道的简单平均值。 然后我从两者计算平均亮度颜色并调整结果颜色以匹配此亮度。这工作得很好,但是色调混合有时是错误的,例如。 G。:

Red (Hue 0°) + Blue (Hue 240°) = Green (Hue 120°)

我发现有时需要将色相值偏移360°(当色相大于180°)。

Red (Hue 360°) + Blue (Hue 240°) = Magenta/fuchsia (Hue 300°)

但是这种转变也不是很好,例如:

Cyan (Hue 179°) + Red (Hue 0°) = Hue 89.5°
Cyan (Hue 181°) + Red (Hue 0°) --> shifting is performed (the difference is greater than 180°)
Cyan (Hue 181°) + Red (Hue 360°) = Hue 270.5°

(色调179 +红色)和(色调181 +红色)产生两种完全不同的颜色。


然后,我尝试了CIE Lab色彩空间(例如在Photoshop中),该色彩空间旨在更接近人类如何感知色彩。

我只对每个对应的两个通道使用了一个简单的平均值,但结果并不令人满意,例如,我得到蓝色(98,-16、93)和黄色(30、68,-112)中的粉色(64、26,-9.5)。 这些系数取自Photoshop。

也许我使用的操作与平均操作有所不同,它可以工作,但是我不知道


CMYK也不起作用,结果就像在RGB或LAB中一样。


似乎在这些颜色空间的任何一个中进行琐碎的加法或减色混合都不会产生自然的结果。


工作实施

Krita –绘画混合器

光栅图形编辑器Krita在某个时候可以实现更逼真的色彩混合:[http://commit-digest.org/issues/2007-08-12/](Painterly混合器插件)

他们说这是第一个使用描述颜料行为的Kubelka和Munk方程实现特殊技术的公共应用程序。

这是Krita混色的视频:[https://www.youtube.com/watch?v=lyLPZDVdQiQ]

FiftyThree的论文

在FiftyThree开发的iOS版Paper应用中,也有关于混色的文章。 他们描述了他们在该地区的创新和实验方式,还提供了蓝色和黄色混合得到绿色的样本。 但是,此处并未真正描述实际的过程或算法。

报价:

“在寻找一种好的混合算法时,我们最初尝试在各种颜色空间内进行插值:RGB,HSV和HSL,然后是CieLAB和CieLUV。结果令人失望,” Chen说。 “我们知道红色和黄色应该产生橙色,或者红色和蓝色应该变成紫色-但是无论使用哪种颜色空间,都无法获得这些颜色。有一个工程公理:做最简单的事情就是 嗯,我们现在尝试了最简单的方法,但感觉并不遥远。”

似乎与Krita一样,Paper实现了Kubelka-Munk模型:

Kubelka-Munk模型的每种颜色至少具有六个值,包括每种RGB颜色的反射和吸收值。 “尽管屏幕上的颜色外观可以从三个维度来描述,但是色彩的融合实际上是在一个六维空间中进行的,” FiftyThree的联合创始人兼首席执行官Georg Petschnigg解释说。 Kubelka-Munk的论文使团队能够将美学问题转化为数学框架。 [...]

从所有这些信息来看,基于Kubelka-Munk模型的实现似乎是前进的方向,并提供了更加接近现实的结果。

尽管它看起来像一个复杂的过程,但我还没有看到很多有关如何实现这样的信息。


相关问题

这些问题都在同一问题之后发布。

他们都没有真正的答案。

  • 计算RGB中的混合色
  • 在其他两种颜色之间寻找颜色的算法-在绘画颜色的颜色空间中
  • 像Krita一样实现Kubelka-Munk来混合颜料等颜色

其他相关链接和资源

  • Twitter上的Kubelka-Munk搜索
  • 混合涂料(!! Con 2016)戴安娜·廖(Diana Liao)
    • 滑梯
    • 视频
  • 绘画启发的颜色混合和合成,以实现可视化(N. Gossett,B。Chen)
trans by 2019-10-14T22:55:54Z

语言不可知论-计算相交光盘数量的算法

给定N整数的数组A,我们在2D平面上绘制N个圆盘,使得第i个圆盘的中心为(0,i),半径为A[i]。如果第k个圆盘和第j个圆盘相交,则我们说第k个圆盘和第j个圆盘相交 第j个光盘至少有一个共同点。

写一个函数

int number_of_disc_intersections(int[] A);

给定数组A(如上所述)描述了N个光盘,该数组返回相交的光盘对数。 例如,给定N

A[0] = 1
A[1] = 5
A[2] = 2
A[3] = 1
A[4] = 4
A[5] = 0

有11对相交的光盘:

0th and 1st
0th and 2nd
0th and 4th
1st and 2nd
1st and 3rd
1st and 4th
1st and 5th
2nd and 3rd
2nd and 4th
3rd and 4th
4th and 5th

因此该函数应返回11。如果相交对的数量超过10,000,000,则函数应返回-1。 该函数可以假定N不超过10,000,000。

trans by 2019-10-14T18:13:49Z

算法-生成给定字符串的所有唯一子字符串

给定一个字符串1..n,什么是生成一组所有唯一子字符串的最快方法?

示例:对于1..n,我们将获得O(n^2)

天真的算法是遍历整个字符串,并在每次迭代中生成长度为1..n的子字符串,从而产生O(n^2)上限。

更好的约束可能吗?

(从技术上讲这是家庭作业,因此也欢迎只使用指针)

trans by 2019-10-13T23:17:47Z

单元测试-如何模拟Sealed类?

模拟密封课程可能会很痛苦。 我目前更喜欢使用Adapter模式来处理此问题,但是有些事情总是让人觉得很奇怪。

那么,模拟密封类的最佳方法是什么?

非常欢迎Java的答案。 实际上,我希望Java社区已经处理了更长的时间,并且可以提供很多东西。

但是,这里有一些.NET意见:

  • 为什么鸭子为C#打字很重要开发者
  • 创建包装器用于密封和其他类型的嘲笑
  • WCF(和Moq)的单元测试
trans by 2019-10-12T20:01:48Z

java-为什么要完全使用继承?

我知道这个问题以前已经讨论过,但是似乎总是在假设继承至少有时比组合更可取。 我想挑战这个假设,希望能有所了解。

我的问题是:既然您可以用经典继承来完成对象组合的任何事情,并且经典继承经常被滥用[1],并且由于对象组合使您可以灵活地更改委托对象的运行时,为什么您会使用 古典继承?

我可以理解为什么您会建议在某些语言(例如Java和C ++)中使用继承,而这些语言没有为委托提供方便的语法。 在这些语言中,只要不明显不正确,就可以通过使用继承来节省大量输入。 但是其他语言,例如Objective C和Ruby,既提供了经典继承又提供了非常方便的委托语法。 就我所知,Go编程语言是唯一的语言,它决定了经典继承比它值得的麻烦更多,并且仅支持代码重用的委派。

提出我的问题的另一种方式是:即使您知道经典继承对于实现某个模型并不是不正确的,这是否足以使用它代替组合?

[1]许多人使用经典继承来实现多态,而不是让他们的类实现接口。 继承的目的是代码重用,而不是多态。 此外,有些人使用继承来建立他们对“是”关系的直觉理解的模型,这通常是有问题的。

更新

我只想澄清我在谈到继承时的确切含义:

我说的是类的继承,即类从部分或完全实现的基类继承。 我不是在说从纯粹抽象的基类继承,这与实现接口是同一件事,据我所记录,我并不反对。

更新2

我知道继承是在C ++中实现多态的唯一方法。 在这种情况下,很明显为什么必须使用它。 因此,我的问题仅限于Java和Ruby之类的语言,它们提供了实现多态性的不同方法(分别是接口和鸭子类型)。

trans by 2019-10-11T14:42:26Z

不可知的语言-使用软件事务存储有任何现实世界的经验吗?

似乎最近对STM(软件事务存储)框架和语言扩展有了越来越高的兴趣。 Clojure特别具有出色的实现,它使用MVCC(多版本并发控制)而不是滚动提交日志。 GHC Haskell还具有非常优雅的STM monad,它也可以进行交易组合。 最后,为了稍微说一下我自己的号角,我最近为Scala实现了一个STM框架,该框架静态地强制执行引用限制。

所有这些都是有趣的实验,但似乎仅限于该领域(实验)。 所以我的问题是:你们中的任何人在现实世界中见过或使用过STM吗? 如果是这样,为什么? 它带来了什么好处? 性能如何? (在这一点上似乎有很多相互矛盾的信息)您将再次使用STM还是更喜欢使用其他并发抽象(例如actor)?

trans by 2019-10-09T19:19:24Z

语言不可知-为什么使用switch语句而不使用if-else?

我一直想知道这已经有一段时间了。 到目前为止,我不是一个顽固的程序员,主要是小型Python脚本,并且我编写了一些分子动力学模拟。 对于真正的问题:switch语句的意义是什么? 为什么不能只使用if-else语句?

感谢您的回答,如果您之前曾被问过,请指向我的链接。

编辑

S.Lott指出,这可能是If / Else vs. Switch问题的重复。 如果要关闭,请关闭。 我将其开放以供进一步讨论。

trans by 2019-10-08T05:01:07Z

不可知的语言-Code Golf:打立方体

挑战

字符数最短的代码,将根据用户输入输出打砖塔系列。

输入将是一系列数字(正,负和零),这些数字代表遵循其索引的当前多维数据集塔的高度。 高度0表示没有塔并且被隔开。

立方体塔由堆叠的立方体组成。 如果当前索引上的输入数字为正,则多维数据集将上升;如果当前数字为负,则多维数据集将下降。 使用以下4条线绘制一个多维数据集:

   __
 /__ /|
|   | |
|___|/

多维数据集是3D的-这意味着当两座塔楼彼此相邻放置时,它们会彼此隐藏,从而产生假透视图。

可以假定所有输入均有效且没有错误-每个数字在一行上用空格分隔,至少有一个数字。

测试用例

Input:
    2 -3 -2 1 2 -1
Output:
       __              __
     /__ /|          /__ /|
    |   | |        _|   | |
    |___|/|      /__|___|/|
    |   | |__  _|   |   | |__
    |___|/__ /__|___|___|/__ /|
        |   |   | |     |   | |
        |___|___|/|     |___|/
        |   |   | |
        |___|___|/
        |   | |
        |___|/

Input:
    1 2 3 4 -2 4 3 2 1
Output:
                   __      __ 
                 /__ /|  /__ /|
               _|   | | |   | |__
             /__|___|/| |___|/__ /|
           _|   |   | | |   |   | |__
         /__|___|___|/| |___|___|/__ /|
       _|   |   |   | | |   |   |   | |__
     /__|___|___|___|/| |___|___|___|/__ /|
    |   |   |   |   | |_|   |   |   |   | |
    |___|___|___|___|/__|___|___|___|___|/
                    |   | |
                    |___|/|
                    |   | |
                    |___|/

Input:
    1 3 3 7 0 -2 -2
Output:
                   __
                 /__ /|
                |   | |
                |___|/| 
                |   | | 
                |___|/| 
                |   | | 
                |___|/| 
           __  _|   | | 
         /__ /__|___|/| 
        |   |   |   | | 
        |___|___|___|/| 
       _|   |   |   | | 
     /__|___|___|___|/| 
    |   |   |   |   | |    __  __
    |___|___|___|___|/   /__ /__ /|
                        |   |   | |
                        |___|___|/|
                        |   |   | |
                        |___|___|/

代码计数包括输入/输出(即完整程序)。

trans by 2019-10-05T03:48:52Z

语言不可知论-您如何应对编码员昏迷?

作为程序员,我有时会发现自己处于完成一项非常乏味而无聊的任务的位置。 这不足为奇,如果编程的各个方面都极富挑战性和乐趣,那将很奇怪,但这并不能改变我希望没有这些类型的分配就可以生活的事实。

在大多数情况下,我设法通过简单地尽可能快地完成任务来完成任务,但有时却并非如此。 我发现自己除了完成无聊的任务外,还要做其他事情,如果需要的话,还要进行其他多项任务,只是我有一个没有完成的理由。 当然,这会影响我的职业生涯,因为我不断地从一个挑战跳到另一个挑战,在我身后留下未完成的痕迹。

您如何应付编码员昏迷? 关于完成无聊的东西时,有什么技巧可以提高工作效率吗?

trans by 2019-10-02T06:00:39Z

语言不可知论-如何设计可扩展软件(插件体系结构)?

我需要一些资源来谈论如何将软件设计为可扩展的,即让其他人可以编写可为其添加功能的附件/插件。

您有什么推荐的吗? 有没有讨论该主题的书?
我希望简短而切合实际的东西; 一些理论和一些具体示例。

我没有针对特定的语言,我希望能够理解核心思想,以便可以用任何一种语言来实现它。

出于同样的原因,我不希望使用其他人构建的框架(除非该框架不是非常高级,即不会隐藏太多),此刻我只想对自己进行 主题并尝试各种实施方式。 另外,框架通常假设用户对主题的了解。

UPDATE

我不是在问OOP或在允许我的类继承。 我说的是设计一个将部署在系统上的应用程序,以便在部署后可以由第三方加载项进行扩展。

例如,Notepad ++具有一个插件体系结构,您可以在其中将.dll文件放置在plugins文件夹中,并且它为应用程序中不存在的功能添加功能,例如颜色选择,代码段插入或许多其他功能。 (广泛的功能)。

trans by 2019-09-30T16:17:22Z

语言不可知-Monads与Arrows

我对函数式编程中使用的monad和箭头的概念非常熟悉。 我也了解它们可以用来解决类似的问题。

但是,对于在任何给定情况下如何选择要使用的选项,我仍然有些困惑。

什么时候应该使用monad,什么时候应该使用箭头?

trans by 2019-09-30T14:09:07Z

算法-智能进度条ETA计算

在许多应用程序中,我们都有一些进度条,用于文件下载,压缩任务,搜索等。我们都经常使用进度条让用户知道正在发生的事情。 而且,如果我们知道一些细节,例如已完成的工作量和剩余的工作量,我们甚至可以给出时间估计,通常可以通过推断达到当前进度所需的时间来推断。

压缩ETA屏幕快照[http://jameslao.com/wp-content/uploads/2008/01/winrar-progress-bar.png]

但是,我们还看到了“ Time Left”“ ETA”显示的程序非常可笑。 它声称将在20秒内完成文件复制,然后在一秒钟后表示将花费4天,然后又闪烁了20分钟。 这不仅无益,而且令人困惑!ETA之所以变化很大,是因为进度本身可能会变化,并且程序员的数学可能过于敏感。

苹果通过避免进行任何准确的预测并仅给出模糊的估计来避免这种情况!Apple's vague evasion
(来源:autodesk.com)

这也很烦人,我是否有时间快速休息,还是我的任务将在2秒内完成? 如果预测过于模糊,则根本无法进行任何预测。

简单但错误的方法

作为首轮ETA计算,大概我们都可以做一个函数,例如,如果p是已经完成的小数百分比,而t是到目前为止所花费的时间,我们输出t *(1-p)/ p作为对 需要多长时间才能完成。 这个简单的比率可以“正常”运行,但也很糟糕,特别是在计算结束时。 如果您的缓慢下载速度使副本在一整夜里缓慢前进,最后在早晨,则出现了一些情况,并且副本开始以全速以100倍的速度运行,完成90%的ETA可能会说“ 1小时”和10秒 稍后您达到95%,ETA会说“ 30分钟”,这显然是一个令人尴尬的猜测。.在这种情况下,“ 10秒”是一个更好得多的估计。

发生这种情况时,您可能会考虑将计算更改为使用最新速度而非平均速度来估计ETA。 您可以获取最近10秒钟的平均下载速率或完成速度,并使用该速度来预测完成时间。 在之前的过夜下载(最终速度加快)示例中,该方法的效果很好,因为最终它会给出非常好的最终完成估算值。 但这仍然有很大的问题..当您的速率在短时间内快速变化时,它会导致您的ETA剧烈反弹,并且您得到“在20秒内完成,在2小时内完成,在2秒内完成,在30秒内完成 分钟”迅速显示出编程的耻辱。

实际问题:

给定计算的时间历史,计算任务完成时间的最佳方法是什么? 我不是在寻找指向GUI工具包或Qt库的链接。 我在问有关生成最合理和准确的完成时间估算值的算法。

数学公式是否成功? 某种平均,可能是通过使用10秒以上的速率的平均值,1分钟以上的速率和1小时以上的速率的平均值? 某种人工过滤,例如“如果我的新估计值与先前的估计值相差太大,将其调低,不要让其反弹太多”? 某种花式历史分析,您可以在其中整合进度与时间进度,以找到费率的标准偏差,从而在完成时提供统计误差指标?

您尝试过什么,什么最有效?

trans by 2019-09-28T19:30:37Z

不可知的语言-什么是未开发区域和未开发区域应用程序?

我在Fluent NHibernate Wiki中阅读了以下句子:

...; 但是,对于大多数未开发的应用程序(以及很多未开发的应用程序)来说,自动映射将比其功能强大。

什么是绿地和棕地应用?

trans by 2019-09-24T05:11:35Z

语言不可知论-给定一个整数,我如何使用位旋转找到两个整数的下一个最大幂?

如果我有一个整数n = 123,则如何通过按位移位或逻辑来找到下一个数字k = 128,使得124i的某些i元素一样。

示例:如果我有n = 123,我怎么能找到k = 128,它是2的幂,而不是124,它只能被2除。 这应该很简单,但这使我难以理解。

trans by 2019-09-23T10:09:32Z

不可知的语言-内存映射文件的优点是什么?

我一直在研究一个项目的内存映射文件,并且会很感激以前使用过或决定不使用它们的人的任何想法,为什么?

我尤其关注以下重要性顺序:

  • 并发
  • 随机访问
  • 性能
  • 使用方便
  • 可移植性
trans by 2019-09-22T05:55:28Z

C#-如何始终舍入到下一个整数

这个问题在这里已有答案:

  • 我如何确保整数除法总是四舍五入?                                     7个答案

我试图在网站上建立一个分页器时查找页面总数(所以我希望结果为整数。我得到了一个记录列表,我希望每页分成10个页面(页面数)

当我这样做时:

list.Count() / 10

要么

list.Count() / (decimal)10

2,我得到1的结果。

我将如何编码,以便在这种情况下得到2(其余应始终添加1

trans by 2019-09-22T05:47:30Z

语言无关 - 在编写任何代码之前如何规划应用程序的体系结构?

我挣扎的一件事是在编写任何代码之前规划应用程序的架构。

我并不是说收集需求来缩小应用程序需要做什么,而是有效地思考一个好的方法来布置整体类,数据和流程结构,并迭代这些想法,以便我有一个可靠的计划 甚至在打开IDE之前的行动。 目前,只需打开IDE即可轻松创建一个空白项目,开始编写位和bob,让设计从那里“成长”。

我收集UML是一种方法来做到这一点,但我没有经验,所以它似乎有点模糊。

在编写任何代码之前,您如何规划应用程序的体系结构? 如果UML是可行的方法,您能否为小型应用程序的开发人员推荐简明实用的介绍?

我很感激你的意见。

trans by 2019-09-18T11:55:26Z

语言不可知 - 用于将许可证头添加到源文件的工具?

我正在寻找一种工具,它将批量添加许可证标题到某些源文件,其中一些已经有标题。 是否有一个工具会插入标题,如果它还没有?

编辑:我故意没有标记这个问题的答案,因为答案基本上都是环境特定和主观的

trans by 2019-09-15T06:55:13Z

javascript - 为什么Math.pow(0,0)=== 1?

我们都知道00是不确定的。

但是,javascript说:

Math.pow(0, 0) === 1 // true

和C ++说同样的话:

pow(0, 0) == 1 // true

为什么?

我知道:

>Math.pow(0.001, 0.001)
0.9931160484209338

但是为什么Math.pow(0, 0)没有错误? 或者NaN可能比1好。

trans by 2019-09-13T21:26:14Z

1 2 3 4 5 6 7 8 9 10 11 下一页 共11页