def test_str5_color(): """Test the str5 functions for cmyk and hsv.""" cornelltest.assert_equals( '(98.45, 25.36, 72.80, 1.000)', a3.str5_cmyk(colormodel.CMYK(98.448, 25.362, 72.8, 1.0))) cornelltest.assert_equals( '(1.000, 100.0, 23.12, 54.44)', a3.str5_cmyk(colormodel.CMYK(1, 100, 23.12345, 54.435))) cornelltest.assert_equals('(98.45, 0.000, 0.123)', a3.str5_hsv(colormodel.HSV(98.448, 0, .123456))) cornelltest.assert_equals('(312.0, 0.500, 0.568)', a3.str5_hsv(colormodel.HSV(312, 0.5, 0.56789)))
def test_str5_color(): """Test the str5 functions for cmyk and hsv.""" cornelltest.assert_equals( '(98.45, 25.36, 72.80, 1.000)', a3.str5_cmyk(colormodel.CMYK(98.448, 25.362, 72.8, 1.0))) cornelltest.assert_equals( '(100.0, 0.225, 83.50, 0.000)', a3.str5_cmyk(colormodel.CMYK(100.0, .2245, 83.5, 0.0))) cornelltest.assert_equals( '(56.00, 0.000, 0.987)', a3.str5_hsv(colormodel.HSV(55.999, 0.0, 0.9874234353442))) cornelltest.assert_equals( '(250.4, 1.000, 0.488)', a3.str5_hsv(colormodel.HSV(250.356, 1.0, .4878325345)))
def rgb_to_hsv(rgb): """Return: color rgb in HSV color space. Formulae from wikipedia.org/wiki/HSV_color_space. Parameter rgb: the color to convert to a HSV object Precondition: rgb is an RGB object""" hsv = colormodel.HSV(0.0, 0.0, 0.0) r = rgb.red / 255.0 g = rgb.green / 255.0 b = rgb.blue / 255.0 big = max(r, g, b) small = min(r, g, b) if big == small: hsv.hue = 0.0 elif big == r and g >= b: hsv.hue = 60.0 * (g - b) / (big - small) elif big == r and g < b: hsv.hue = 60.0 * (g - b) / (big - small) + 360.0 elif big == g: hsv.hue = 60.0 * (b - r) / (big - small) + 120.0 elif big == b: hsv.hue = 60.0 * (r - g) / (big - small) + 240.0 if big == 0: hsv.saturation = 0 else: hsv.saturation = 1 - small / big hsv.value = big return hsv
def on_hsv_press(self,h,s,v): """Call back to hsv button""" self.hsv = colormodel.HSV(h, s, v) temp = a3.hsv_to_rgb(self.hsv) assert (temp == None or type(temp) == colormodel.RGB), 'hsv_to_rgb does not return a RGB object' self.rgb = self.rgb if temp is None else temp self.cmyk = a3.rgb_to_cmyk(self.rgb); assert (self.cmyk == None or type(self.cmyk) == colormodel.CMYK), 'rgb_to_cmyk does not return a CMYK object' self.update()
def test_to_strings(): """Test toString methods""" #Test rgb_to_string:() cunittest.assert_equals("(30, 240, 230)", a3.rgb_to_string(colormodel.RGB(30, 240, 230))) #Test cmyk_to_string() cunittest.assert_equals("(10.00, 11.00, 20.00, 12.00)", a3.cmyk_to_string(colormodel.CMYK(10, 11, 20, 12))) #Test that cmyk_to_string() uses round5(), not `truncate5()`: cunittest.assert_equals( "(10.01, 11.00, 20.01, 12.00)", a3.cmyk_to_string(colormodel.CMYK(10.005, 11.0045, 20.009, 12.001))) #Test hsv_to_string() cunittest.assert_equals("(100.0, 1.000, 1.000)", a3.hsv_to_string(colormodel.HSV(100, 1, 1))) #Test that hsv_to_string uses round5(), not `truncate5()`: cunittest.assert_equals( "(100.0, 0.500, 0.499)", a3.hsv_to_string(colormodel.HSV(99.999, .4996, .4994)))
def on_hsv_slide(self,h,s,v): """Call back to hsv sliders""" if not self.active: return hue = h / 100.0 sat = s / 100.0 val = v / 100.0 self.hsv = colormodel.HSV(hue, sat, val) temp = a3.hsv_to_rgb(self.hsv) assert (temp == None or type(temp) == colormodel.RGB), 'hsv_to_rgb does not return a RGB object' self.rgb = self.rgb if temp is None else temp self.cmyk = a3.rgb_to_cmyk(self.rgb); assert (self.cmyk == None or type(self.cmyk) == colormodel.CMYK), 'rgb_to_cmyk does not return a CMYK object' self.update()
def test_hsv_to_rgb(): """Test translation function hsv_to_rgb""" #hi = 0 hsv = colormodel.HSV(0.0, 0.0, 0.0) rgb = a3.hsv_to_rgb(hsv) cornelltest.assert_equals(0, rgb.red) cornelltest.assert_equals(0, rgb.green) cornelltest.assert_equals(0, rgb.blue) hsv = colormodel.HSV(45.5, 0.34, 0.34) rgb = a3.hsv_to_rgb(hsv) cornelltest.assert_equals(87, rgb.red) cornelltest.assert_equals(80, rgb.green) cornelltest.assert_equals(57, rgb.blue) #hi = 1 hsv = colormodel.HSV(80.0, 0.5, 0.123) rgb = a3.hsv_to_rgb(hsv) cornelltest.assert_equals(26, rgb.red) cornelltest.assert_equals(31, rgb.green) cornelltest.assert_equals(16, rgb.blue) #hi = 2 hsv = colormodel.HSV(153.3, 0.9, 0.4) rgb = a3.hsv_to_rgb(hsv) cornelltest.assert_equals(10, rgb.red) cornelltest.assert_equals(102, rgb.green) cornelltest.assert_equals(61, rgb.blue) #hi = 3 hsv = colormodel.HSV(181.1, 0.234, 0.432) rgb = a3.hsv_to_rgb(hsv) cornelltest.assert_equals(84, rgb.red) cornelltest.assert_equals(110, rgb.green) cornelltest.assert_equals(110, rgb.blue) #hi = 4 hsv = colormodel.HSV(275.0, 0.175, 0.275) rgb = a3.hsv_to_rgb(hsv) cornelltest.assert_equals(65, rgb.red) cornelltest.assert_equals(58, rgb.green) cornelltest.assert_equals(70, rgb.blue) #hi = 5 hsv = colormodel.HSV(359.9, 0.76, 0.765) rgb = a3.hsv_to_rgb(hsv) cornelltest.assert_equals(195, rgb.red) cornelltest.assert_equals(47, rgb.green) cornelltest.assert_equals(47, rgb.blue)
def radiate_helper(t, side, n, sp): """Draws n straight radiating lines of length s at equal angles. This lines are drawn using turtle t with the turtle moving at speed sp. A line drawn at angle ang, 0 <= ang < 360 has HSV color (ang % 360.0, 1, 1). WHEN DONE, THE FOLLOWING TURTLE ATTRIBUTES ARE THE SAME AS IT STARTED: color, speed, visible, and drawmode. However, the final position and heading may be different. If you changed any of these four in the function, you must change them back. Parameter t: The drawing Turtle Precondition: t is a Turtle with drawmode True. Parameter side: The length of each radial line Precondition: side is a valid side length (number >= 0) Parameter n: The number of lines to draw Precondition: n is an int >= 2 Parameter sp: The turtle speed. Precondition: sp is a valid turtle speed.""" assert is_valid_turtlemode(t), report_error('Invalid turtle mode', t) assert is_valid_length(side), report_error('side is not a valid length',side) assert type(n) == int and n >=2, report_error('n is not a valid value',n) assert is_valid_speed(sp), report_error('sp is not a valid speed',sp) tempspeed = t.speed tempcolor = t.color tempvisible = t.visible tempdrawmode = t.drawmode tempx = t.x tempy = t.y t.speed = sp for x in range(n): t.color = colormodel.HSV(t.heading % 360.0, 1, 1) t.forward(side) t.move(tempx, tempy) t.left(360.0/n) t.speed = tempspeed t.color = tempcolor t.visible = tempvisible t.drawmode = tempdrawmode
def test_hsv_to_rgb(): """Test translation function hsv_to_rgb""" #Test hsv_to_rgb() when H is in the interval [0,60): hsv = colormodel.HSV(42, .6, .7) rgb = a3.hsv_to_rgb(hsv) cunittest.assert_equals(179, rgb.red) cunittest.assert_equals(146, rgb.green) cunittest.assert_equals(71, rgb.blue) #Test hsv_to_rgb() when H is in the interval [60,120): hsv = colormodel.HSV(94, .5, .5) rgb = a3.hsv_to_rgb(hsv) cunittest.assert_equals(91, rgb.red) cunittest.assert_equals(128, rgb.green) cunittest.assert_equals(64, rgb.blue) #Test hsv_to_rgb() when H is in the interval [120,180): #Also tests that hsv_to_rgb() properly handles values at the borders of #each interval of H hsv = colormodel.HSV(120, .5, .5) rgb = a3.hsv_to_rgb(hsv) cunittest.assert_equals(64, rgb.red) cunittest.assert_equals(128, rgb.green) cunittest.assert_equals(64, rgb.blue) #Test hsv_to_rgb() when H is in the interval [180,240): hsv = colormodel.HSV(216, .6, .3) rgb = a3.hsv_to_rgb(hsv) cunittest.assert_equals(31, rgb.red) cunittest.assert_equals(49, rgb.green) cunittest.assert_equals(77, rgb.blue) #Test hsv_to_rgb() when H is in the interval [240,300): hsv = colormodel.HSV(256, .2, .8) rgb = a3.hsv_to_rgb(hsv) cunittest.assert_equals(174, rgb.red) cunittest.assert_equals(163, rgb.green) cunittest.assert_equals(204, rgb.blue) #Test hsv_to_rgb() when H is in the interval [300,360): hsv = colormodel.HSV(343, .7, .3) rgb = a3.hsv_to_rgb(hsv) cunittest.assert_equals(77, rgb.red) cunittest.assert_equals(23, rgb.green) cunittest.assert_equals(38, rgb.blue)
def rgb_to_hsv(rgb): """Return: color rgb in HSV color space. Formulae from wikipedia.org/wiki/HSV_color_space. Precondition: rgb is an RGB object""" assert (type(rgb) == colormodel.RGB), ('Value ' + ` rgb ` + ' is not an RGB object') R = rgb.red / 255.0 G = rgb.green / 255.0 B = rgb.blue / 255.0 colors = [R, G, B] colors.sort() MIN = colors[0] MAX = colors[2] if MAX == MIN: H = 0 elif MAX == R: if G >= B: H = 60.0 * (G - B) / (MAX - MIN) else: H = 60.0 * (G - B) / (MAX - MIN) + 360.0 elif MAX == G: H = 60.0 * (B - R) / (MAX - MIN) + 120.0 else: H = 60.0 * (R - G) / (MAX - MIN) + 240.0 if MAX == 0: S = 0 else: S = 1 - MIN / MAX return colormodel.HSV(H, S, MAX)
def rgb_to_hsv(rgb): """Return: color rgb in HSV color space. Formulae from wikipedia.org/wiki/HSV_color_space. Parameter rgb: the color to convert to a HSV object Precondition: rgb is an RGB object""" # Divide all rgb values by 255.0 to change range from 0..255.0 to 0..1.0 r = rgb.red / 255.0 g = rgb.green / 255.0 b = rgb.blue / 255.0 #Minimum and maximum of rgb values MAX = max(r, g, b) MIN = min(r, g, b) if MAX == MIN: h = 0 elif MAX == r and g >= b: h = 60.0 * (g - b) / (MAX - MIN) elif MAX == r and g < b: h = 60.0 * (g - b) / (MAX - MIN) + 360.0 elif MAX == g: h = 60.0 * (b - r) / (MAX - MIN) + 120.0 elif MAX == b: h = 60.0 * (r - g) / (MAX - MIN) + 240.0 if MAX == 0: s = 0 else: s = 1 - MIN / MAX v = MAX return colormodel.HSV(h, s, v)
def test_hsv_to_rgb(): """Test translation function hsv_to_rgb""" hsv= colormodel.HSV(20.00,1.000,1.000) rgb= a3.hsv_to_rgb(hsv) cornelltest.assert_equals( 255, rgb.red) cornelltest.assert_equals(84, rgb.green) cornelltest.assert_equals(0, rgb.blue) hsv= colormodel.HSV(60.00,1.000,1.000) rgb= a3.hsv_to_rgb(hsv) cornelltest.assert_equals( 255, rgb.red) cornelltest.assert_equals(255, rgb.green) cornelltest.assert_equals(0, rgb.blue) hsv= colormodel.HSV(120.00,1.000,1.000) rgb= a3.hsv_to_rgb(hsv) cornelltest.assert_equals( 0, rgb.red) cornelltest.assert_equals(255, rgb.green) cornelltest.assert_equals(0, rgb.blue) hsv= colormodel.HSV(180.00,1.000,1.000) rgb= a3.hsv_to_rgb(hsv) cornelltest.assert_equals( 0, rgb.red) cornelltest.assert_equals(255, rgb.green) cornelltest.assert_equals(255, rgb.blue) hsv= colormodel.HSV(240.00,1.000,1.000) rgb= a3.hsv_to_rgb(hsv) cornelltest.assert_equals( 0, rgb.red) cornelltest.assert_equals(0, rgb.green) cornelltest.assert_equals(255, rgb.blue) hsv= colormodel.HSV(300.00,1.000,1.000) rgb= a3.hsv_to_rgb(hsv) cornelltest.assert_equals( 255, rgb.red) cornelltest.assert_equals(0, rgb.green) cornelltest.assert_equals(255, rgb.blue)
def test_hsv_to_rgb(): """Test translation function hsv_to_rgb""" hsv = colormodel.HSV(30.54, 1.0, 0.54321) rgb = a3.hsv_to_rgb(hsv) cornelltest.assert_equals(139, rgb.red) cornelltest.assert_equals(71, rgb.green) cornelltest.assert_equals(0, rgb.blue) hsv = colormodel.HSV(78.93, 0.33, 0.02) rgb = a3.hsv_to_rgb(hsv) cornelltest.assert_equals(5, rgb.red) cornelltest.assert_equals(5, rgb.green) cornelltest.assert_equals(3, rgb.blue) hsv = colormodel.HSV(125.666, 0.666, 1.00) rgb = a3.hsv_to_rgb(hsv) cornelltest.assert_equals(85, rgb.red) cornelltest.assert_equals(255, rgb.green) cornelltest.assert_equals(101, rgb.blue) hsv = colormodel.HSV(188.808, 0.001, .115) rgb = a3.hsv_to_rgb(hsv) cornelltest.assert_equals(29, rgb.red) cornelltest.assert_equals(29, rgb.green) cornelltest.assert_equals(29, rgb.blue) hsv = colormodel.HSV(255.22812234, .5532354326, .834098765432) rgb = a3.hsv_to_rgb(hsv) cornelltest.assert_equals(125, rgb.red) cornelltest.assert_equals(95, rgb.green) cornelltest.assert_equals(213, rgb.blue) hsv = colormodel.HSV(341.0928346, .4088, 0.9234) rgb = a3.hsv_to_rgb(hsv) cornelltest.assert_equals(235, rgb.red) cornelltest.assert_equals(139, rgb.green) cornelltest.assert_equals(170, rgb.blue)