Nadesłany przez Tomasz Lubiński, 06 września 2005 01:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.Pobierz pełne rozwiązanie.
Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.
Hsv_rgb.java:
/** Transformacja pomiedzy modelami HSV i RGB www.algorytm.org (c)2005 Tomasz Lubinski */ public class Hsv_rgb { private static double[] hsv2rgb(double hue, double sat, double val) { double red = 0, grn = 0, blu = 0; double i, f, p, q, t; double result[] = new double[3]; if(val==0) { red = 0; grn = 0; blu = 0; } else { hue/=60; i = Math.floor(hue); f = hue-i; p = val*(1-sat); q = val*(1-(sat*f)); t = val*(1-(sat*(1-f))); if (i==0) {red=val; grn=t; blu=p;} else if (i==1) {red=q; grn=val; blu=p;} else if (i==2) {red=p; grn=val; blu=t;} else if (i==3) {red=p; grn=q; blu=val;} else if (i==4) {red=t; grn=p; blu=val;} else if (i==5) {red=val; grn=p; blu=q;} } result[0] = red; result[1] = grn; result[2] = blu; return result; } private static double[] rgb2hsv(double red, double grn, double blu){ double hue, sat, val; double x, f, i; double result[] = new double[3]; x = Math.min(Math.min(red, grn), blu); val = Math.max(Math.max(red, grn), blu); if (x == val){ hue = 0; sat = 0; } else { f = (red == x) ? grn-blu : ((grn == x) ? blu-red : red-grn); i = (red == x) ? 3 : ((grn == x) ? 5 : 1); hue = ((i-f/(val-x))*60)%360; sat = ((val-x)/val); } result[0] = hue; result[1] = sat; result[2] = val; return result; } public static void main(String[] args) { int x; double h,s,v; double r,g,b; double result[]; System.out.println("1. Dla transformacji HSV -> RGB"); System.out.println("2. Dla transformacji RGB -> HSV"); x = Console.readInt("?"); if (x == 1){ h = Console.readDouble("H="); s = Console.readDouble("S="); v = Console.readDouble("V="); result = hsv2rgb(h,s,v); System.out.println("R="+result[0]+", G="+result[1]+", B="+ result[2]); } else { r = Console.readDouble("R="); g = Console.readDouble("G="); b = Console.readDouble("B="); result = rgb2hsv(r,g,b); System.out.println("H="+result[0]+", S="+result[1]+", V="+ result[2]); } } }