sql >> データベース >  >> RDS >> Mysql

MySQLの基準として16進コードを使用して色で注文

    16進コードを波長でソートする場合、これは大まかに色相値にマッピングされます。 6文字の文字列として16進コードを指定します:RRGGBB

    16進コード文字列を受け取り、色相値を出力する関数を作成する必要があります。式は次のとおりです。このMath.SOの回答から

    R'=R / 255

    G'=G / 255

    B'=B / 255

    Cmax =max(R'、G'、B')

    Cmin =min(R'、G'、B')

    Δ=Cmax-Cmin

    これが機能するかどうかを確認したかったので、Rubyでサンプルプログラムを作成し、RGB空間から200のランダムな色を均一にサンプリングして並べ替えると、出力は虹のようになります。

    Rubyのソースは次のとおりです:

    require 'paint'
    
    def hex_to_rgb(hex)
      /(?<r>..)(?<g>..)(?<b>..)/ =~ hex
      [r,g,b].map {|cs| cs.to_i(16) }
    end
    
    def rgb_to_hue(r,g,b)
      # normalize r, g and b
      r_ = r / 255.0
      g_ = g / 255.0
      b_ = b / 255.0
    
      c_min = [r_,g_,b_].min
      c_max = [r_,g_,b_].max
    
      delta = (c_max - c_min).to_f
    
      # compute hue
      hue = 60 * ((g_ - b_)/delta % 6) if c_max == r_
      hue = 60 * ((b_ - r_)/delta + 2) if c_max == g_
      hue = 60 * ((r_ - g_)/delta + 4) if c_max == b_
    
      return hue
    end
    
    # sample uniformly at random from RGB space
    colors = 200.times.map {  (0..255).to_a.sample(3).map { |i| i.to_s(16).rjust(2, '0')}.join   }
    
    # sort by hue
    colors.sort_by { |color| rgb_to_hue(*hex_to_rgb(color)) }.each do |color|
      puts Paint[color, color]
    end
    

    必ずgem install paintを確認してください 色付きのテキスト出力を取得します。

    出力は次のとおりです:

    これをSQLユーザー定義関数およびORDERBYRGB_to_HUE(hex_color_code)として記述するのは比較的簡単ですが、私のSQLの知識はかなり基本的です。

    編集:この質問をd​​ba.SEに投稿しました RubyをSQLユーザー定義関数に変換する方法について。



    1. Schema_migrationsを作成するRails-Mysql2::Error:指定されたキーが長すぎました

    2. MySQLEnterpriseからMariaDB10.3への移行

    3. C#での一括更新

    4. mysqlのグループソート内