algorytm.org

Implementacja w Ruby

Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Transformacja HSV RGB - Implementacja w Ruby
Ocena użytkownikóww: *****  / 0
SłabyŚwietny
Nadesłany przez Nikodem Solarz, 19 lutego 2013 12:28
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.

hsv_rgb.rb:
#======================================================
#**Implementacja algorytmu przekształcania modeli barw
#**RGB->HSV i na odwrót (HSV->RGB)
#**Narzew
#**19.02.2013
#**www.algorytm.org
#======================================================

#======================================================
#**Metody pomocnicze
#======================================================

def wartosc_max(x)
	result = x[0]
	x.each{|y|
	result = y if y > result
	}
	return result
end

def wartosc_min(x)
		result = x[0]
		x.each{|y|
		result = y if y < result
		}
		return result
end

#======================================================
#**Metody właściwe
#======================================================

#======================================================
#**rgb->hsv
#======================================================

def rgb2hsv(r,g,b)
		r = r.to_f
		g = g.to_f
		b = b.to_f
		x = wartosc_min([wartosc_min([r,g]),b])
		v = wartosc_max([wartosc_max([r,g]),b])
		if x == v
				h = 0
				s = 0
				return [h,s,v]
		else
			if r == x
					f = g-b
			else
				if g == x
					f = b-r
				else
					f = r-g
				end
			end
			if r == x
					i = 3
			else
				if g == x
					i = 5
				else
					i = 1
				end
			end
			h = ((i-f/(v-x))*60)%360
			s = ((v-x)/v)
			return [h,s,v]
		end
end

#======================================================
#**hsv->rgb
#======================================================

def hsv2rgb(h,s,v)
		h = h.to_f
		s = s.to_f
		v = v.to_f
		if v == 0
				r = 0
				g = 0
				b = 0
				return [r,g,b]
		else
			h = h/60
			i = h.floor
			f = h-i
			p = v*(1-s)
			q = v*(1-(s*f))
			t = v*(1-(s*(1-f)))
			if i == 0
					r=v
					g=t
					b=p
			elsif i == 1
				r=q
				g=v
				b=p
			elsif i == 2
				r=p
				g=v
				b=t
			elsif i == 3
				r=p
				g=q
				b=v
			elsif i == 4
				r=t
				g=p
				b=v
			elsif i == 5
				r=v
				g=p
				b=q
			end
			return [r,g,b]
		end
end
Dodaj komentarz