コードがgenerate n distinct colorsに見つかりました。私はKotlinにこれを変換すると、問題は私のKotlinの経験(だけでなく、パイソン)のほとんどは、通常の退屈なコードを書いているということですPythonコードをKotlinに変換
import colorsys
import itertools
from fractions import Fraction
class DistinctColorsGenerator:
def __init__(self):
self._bias = lambda x: (math.sqrt(x/3)/Fraction(2, 3) + Fraction(1, 3))/Fraction(6, 5)
self._gen_rgb = lambda x : colorsys.hsv_to_rgb(*x)
self._flatten = itertools.chain.from_iterable
self._hsvs = lambda: self._flatten(map(self._hsv, self._fracs()))
self._rgbs = lambda: map(self._gen_rgb, self._hsvs())
self._gen_colors = lambda: map(self._gen_color, self._rgbs())
def generate(self, number):
return list(itertools.islice(self._gen_colors(), number))
def _zenos_dichotomy(self):
for k in itertools.count():
yield Fraction(1, 2 ** k)
def _fracs(self):
yield 0
for k in self._zenos_dichotomy():
i = k.denominator
for j in range(1, i, 2):
yield Fraction(j, i)
def _hsv(self, h):
for s in [Fraction(6, 10)]:
for v in [Fraction(8, 10), Fraction(5, 10)]:
yield (h, s, v)
def _gen_color(self, x):
uint8tuple = map(lambda y: int(y * 255), x)
return list(uint8tuple)
をコードを取り、それからクラスを作りました。これは、無限のシーケンスを生成し、それを遅延評価することによって問題を解決します。私はちょうどPythonのコードを見て、何が起こっているのかを理解し、シンプルで退屈なコードを書くことができます。しかし、その前に私はコトリンでどのように似たようなことが実現できるかを誰かが示すことができるかどうかをここで尋ねたかったのですが、
、から取っ
ColorHsv.toRgb()
。したがって、このコードを翻訳することは絶対に可能です。 – Tomalak