알고리즘 구상 part1에서는 대표적인 4가지 톤을 RGB 패턴으로 표현하는 방법에 대해 고민했고, part2에서는 사용자에게 추천해 줄 메인컬러를 결정한 후, 함께 입을 만한 색상을 추천해주는 방법에 대해 생각한 것들을 적어보려 한다.

톤인톤(Ton in Ton) & 톤온톤(Ton on Ton)

보기 좋은 색상 조합을 구성하는 방법으로는 대표적으로 톤인톤 방식과 톤온톤 방식이 있다는 것을 검색을 통해 알게 되었다. 톤인톤 방식은 "톤은 같고 색상이 다른" 배색 조합 방식을 뜻하고, 톤온톤 방식은 "색상은 같고 톤이 다른" 배색 조합 방식을 뜻한다. 이 두가지 방식을 이용해 사용자에게 적절한 색상 조합을 추천해주면 좋을 것 같다고 생각했고, 이를 RGB 패턴으로 표현할 수 있는 방법에 대해 고민해보았다.

1. 톤인톤

톤인톤 방식은 위에서 설명한 바와 같이 톤을 같게하고, 색상을 다르게 해서 색상 조합을 구성하는 것을 뜻한다. 이를 RGB 패턴으로 적절히 어떻게 표현할 수 있을까? 다시 말해 나는 톤인톤 방식의 색상 조합을 RGB 패턴으로 나타내면 어떠한 경향성을 보일까를 고민해야 했다.

톤인톤 방식을 RGB 패턴으로 적절히 표현하기 위해 고려해야 하는 요소는 2가지였다.

  1. 색상을 변화한다.
  2. 톤을 같게한다.

"색상이 달라진다"는 현상은 RGB에서 생각보다 단순하게 표현될 수 있었다. "R,G,B 중 두 가지 값을 고정하고, 나머지 하나의 값을 이동시킨다."가 바로 그것이다. 두 번째로 톤을 같게 한다는 것은 채도나 명도를 변화시키지 않는다는 뜻이므로, 검은색 혹은 흰 색으로부터 떨어져 있는 정도가 일정하다는 뜻일 것이다. 이는 하지만 좌표공간 위에서 점 (0, 0, 0) 혹은 점 (255, 255, 255) 로부터 떨어진 거리가 일정하다는 것과는 다른 말이다. 이 점을 완벽히 이해하기 위해서는 좀 더 깊은 설명이 필요하겠지만 이 글의 요지에서는 벗어나므로 생략하겠다. 아무튼 결과적으로, 톤인톤 방식의 색상 조합들이 나타내는 RGB 패턴으로서의 경향성을 시각적으로 나타내 보면 아래와 같다.

image.png

위 그래프를 말로 풀어보면,

R,G,B의 값중 두 값은 무조건 고정(이 값을 각각 a,b라 하자), 나머지 한 값은 a와 b 사이에서 변함. 좌표공간 상에 표현하면 이 점이 그리는 자취는 x,y,z축과 수평또는 수직을 이루는 6개의 선분으로 표현됨.

2. 톤온톤

톤온톤 방식은 색상을 같게 하고, 톤을 다르게 하는 방식이다. 색상의 톤에 관한 고찰은 part 1에서 깊이 다룬 바가 있으므로 톤인톤 방식보다 훨씬 쉽게 RGB 패턴화할 수 있었다.

톤온톤 방식의 색상조합이 그리는 자취는 단순히 어떤 임의의 점과 점(255, 255, 255)를 잇는 직선 위의 점들이 된다.

image.png

적절한 색상 추천 알고리즘을 구현하는 데 필요한 배경지식은 모두 마련했으니, 이제부터 실제 알고리즘을 구현하면 될 것 같다.