From 52bcb504928ec57b5e9bac5313f9020122013f9a Mon Sep 17 00:00:00 2001 From: Moussa Doumbouya Date: Fri, 8 May 2020 23:55:11 +0000 Subject: [PATCH] Graphing functions --- en/graphing-functions/coordinate_systems.png | Bin 0 -> 63556 bytes en/graphing-functions/cos.png | Bin 0 -> 6424 bytes en/graphing-functions/cube.png | Bin 0 -> 6331 bytes en/graphing-functions/index.html | 421 ++++++++++++++++++ en/graphing-functions/inv.png | Bin 0 -> 6320 bytes en/graphing-functions/neg_square.png | Bin 0 -> 5579 bytes en/graphing-functions/square.png | Bin 0 -> 5581 bytes en/graphing-functions/tanh.png | Bin 0 -> 3682 bytes .../graphing-functions/coordinate_systems.png | Bin 0 -> 63556 bytes examples/graphing-functions/cos.png | Bin 0 -> 6424 bytes examples/graphing-functions/credit.txt | 1 + examples/graphing-functions/cube.png | Bin 0 -> 6331 bytes examples/graphing-functions/index.html | 165 +++++++ examples/graphing-functions/inv.png | Bin 0 -> 6320 bytes examples/graphing-functions/neg_square.png | Bin 0 -> 5579 bytes examples/graphing-functions/simpleimage.py | 264 +++++++++++ examples/graphing-functions/soln.py | 178 ++++++++ examples/graphing-functions/square.png | Bin 0 -> 5581 bytes examples/graphing-functions/tags.txt | 4 + examples/graphing-functions/tanh.png | Bin 0 -> 3682 bytes examples/graphing-functions/title.txt | 1 + 21 files changed, 1034 insertions(+) create mode 100644 en/graphing-functions/coordinate_systems.png create mode 100644 en/graphing-functions/cos.png create mode 100644 en/graphing-functions/cube.png create mode 100644 en/graphing-functions/index.html create mode 100644 en/graphing-functions/inv.png create mode 100644 en/graphing-functions/neg_square.png create mode 100644 en/graphing-functions/square.png create mode 100644 en/graphing-functions/tanh.png create mode 100644 examples/graphing-functions/coordinate_systems.png create mode 100644 examples/graphing-functions/cos.png create mode 100644 examples/graphing-functions/credit.txt create mode 100644 examples/graphing-functions/cube.png create mode 100644 examples/graphing-functions/index.html create mode 100644 examples/graphing-functions/inv.png create mode 100644 examples/graphing-functions/neg_square.png create mode 100644 examples/graphing-functions/simpleimage.py create mode 100644 examples/graphing-functions/soln.py create mode 100644 examples/graphing-functions/square.png create mode 100644 examples/graphing-functions/tags.txt create mode 100644 examples/graphing-functions/tanh.png create mode 100644 examples/graphing-functions/title.txt diff --git a/en/graphing-functions/coordinate_systems.png b/en/graphing-functions/coordinate_systems.png new file mode 100644 index 0000000000000000000000000000000000000000..2b983c30a518777aad38b106f89d4d90b3b09b28 GIT binary patch literal 63556 zcmeFZWmuE_8#gW}p`-;85+c%|Ak6?pr6i=0773{#HEM(bC@Ba?Bi%?&Hbw{tf|M}Q zF}k}M8~a~~x8C>f&Hs7zym~keIL5VW-#EYL`8hvlTzjLbu1Ix`@!Y9Xr>K;b?rEJm zbs7i!%9E1J;}oOLKEA zWq$593k!4ewoX2tb1o3AkdQDfbN{vm>Q}XtPbkm5`PM=bK|~}g&q;Zc@v<-CYXf

QXwB*tmbXZ9w_%1r5a~3M(W; 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 literal 0 HcmV?d00001 diff --git a/en/graphing-functions/cos.png b/en/graphing-functions/cos.png new file mode 100644 index 0000000000000000000000000000000000000000..01e6ba0c6361f21fe4e5b4bf01838a9ace30dc4c GIT binary patch literal 6424 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 literal 0 HcmV?d00001 diff --git a/en/graphing-functions/cube.png b/en/graphing-functions/cube.png new file mode 100644 index 0000000000000000000000000000000000000000..a4c12b82dd8f78367cd86f0b230bc06bcb97a418 GIT binary patch literal 6331 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 Functions + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+
+
+

Graphing Functions

+

Problem written by Moussa Doumbouya

+
+

+ In this exercice, you are going to write a program that creates the graphical representation of a function of your choice. Like the followings: +

+ +

+

+
+
+ y = math.cos(x) + +
+ +
+ y = 1/x + +
+ +
+ y = x ** 3 + +
+ +
+
+

+ +

+ This is done by findng the pixels that correspond to (x, y) points of the plotted function, and setting the color of those pixels to green. + The axes are also drawn in a similar fashion. +

+ + + +

Coordinate Systems

+

+

+
+
+ In order to plot functions, you will need to write functions that convert x and y positions from + the plot coordinate system to the pixel coordinate system (illustrated in the adjacent figure). + The starter code suggests the x_to_pixel_x() and y_to_pixel_y() functions for this purpose. The starter code also contains + "doctests" to help you check your implementation. You may run the test cases as follow:

+
python -m doctests your_file.py
+
+
+ +
+
+
+

+ +

Starter Code

+

+ A starter code is provided below. This contains useful constants and a suggested high level decomposition of the problem. +

+ +
+from simpleimage import SimpleImage
+import math
+
+# Domain of the plot
+X_MIN = -10
+X_MAX = 10
+
+# Range of the plot
+Y_MIN = -10
+Y_MAX = 10
+
+# Size of the plot in pixels
+PLOT_WIDTH = 400
+PLOT_HEIGHT = 400
+
+# Color of the axes
+AXIS_COLOR_R = 200
+AXIS_COLOR_G = 0
+AXIS_COLOR_B = 0
+
+# Color of the plot
+PLOT_COLOR_R = 0
+PLOT_COLOR_G = 200
+PLOT_COLOR_B = 0
+
+# x and y step sizes
+DELTA_X = 0.01
+DELTA_Y = 0.01
+
+
+def main():
+	"""
+	Make a blank plot, draw the x and y axis, plot the 
+	function defined by plotted_function and show the plot.
+	"""
+	plot = make_blank_plot()
+	plot = draw_axes(plot)
+	plot = plot_function(plot)
+	plot.show()
+
+
+def ploted_function(x):
+	"""
+	Compute the y value of the ploted function for the given :param:x value.
+	Implement a function of your choice
+	"""
+	return math.cos(x)
+
+
+def x_to_pixel_x(x):
+	"""
+	Compute the horizontal pixel position for horizontal 
+	position :param:x in the plotted coordinate system.
+
+	Test Cases: 
+
+	x = 0 should correspond to middle of the plot
+	>>> x_to_pixel_x(0)
+	200
+
+	x = -10 should correspond to far left of the plot
+	>>> x_to_pixel_x(-10)
+	0
+
+	x = 10 should correspond to far right of the plot
+	Note: x=10 is outside of the plotting area 
+	>>> x_to_pixel_x(10)
+	400
+	"""
+	
+	# TODO: Your code here
+	# calculate the pixel x position and store it in px
+
+	return int(px)
+
+
+def y_to_pixel_y(y):
+	"""
+	Compute the horizontal pixel position for vertical 
+	position :param:y in the plotted coordinate system
+
+	Test Cases:
+
+	y =  0 should correspond to the middle of the plot
+	>>> y_to_pixel_y(0)
+	200
+
+	y=10 should correspond to the top of the plot.
+	>>> y_to_pixel_y(10)
+	0
+
+	y=-10 should correspond to the bottom of the plot
+	Note y=-10 is actually outside of the plotting area
+	>>> y_to_pixel_y(-10)
+	400
+	"""
+	
+	# TODO: your code here
+	# Calculate the pixel y position and store it in py
+
+	return int(py)
+
+if __name__ == '__main__':
+	main()
+
+ + + + +

Solution

+

+ +

+
+
from simpleimage import SimpleImage
+import math
+
+# Domain of the plot
+X_MIN = -10
+X_MAX = 10
+
+# Range of the plot
+Y_MIN = -10
+Y_MAX = 10
+
+# Size of the plot in pixels
+PLOT_WIDTH = 400
+PLOT_HEIGHT = 400
+
+# Color of the axes
+AXIS_COLOR_R = 200
+AXIS_COLOR_G = 0
+AXIS_COLOR_B = 0
+
+# Color of the plot
+PLOT_COLOR_R = 0
+PLOT_COLOR_G = 200
+PLOT_COLOR_B = 0
+
+# x and y step sizes
+DELTA_X = 0.01
+DELTA_Y = 0.01
+
+
+def main():
+	"""
+	Make a blank plot, draw the x and y axis, plot the 
+	function defined by plotted_function and show the plot.
+	"""
+	plot = make_blank_plot()
+	plot = draw_axes(plot)
+	plot = plot_function(plot)
+	plot.show()
+
+
+def ploted_function(x):
+	"""
+	Compute the ploted function at point :param:x
+	"""
+	# return math.cos(x)
+	# return math.tanh(x)
+	# return x**3
+	return x ** 2
+
+
+def make_blank_plot():
+	"""
+	Create an image with all pixel colors set to black
+	"""
+	plot = SimpleImage.blank(PLOT_WIDTH, PLOT_HEIGHT)
+	for px in plot:
+		px.red = 0
+		px.green = 0
+		px.blue = 0
+	return plot
+
+
+def x_to_pixel_x(x):
+	"""
+	Compute the horizontal pixel position for horizontal 
+	position :param:x in the plotted coordinate system.
+
+	Test Cases: 
+
+	x = 0 should correspond to middle of the plot
+	>>> x_to_pixel_x(0)
+	200
+
+	x = -10 should correspond to far left of the plot
+	>>> x_to_pixel_x(-10)
+	0
+
+	x = 10 should correspond to far right of the plot
+	Note: x=10 is outside of the plotting area 
+	>>> x_to_pixel_x(10)
+	400
+	"""
+	h_pixel_per_point = PLOT_WIDTH / (X_MAX - X_MIN)
+	px = x * h_pixel_per_point + PLOT_WIDTH/2
+	return int(px)
+
+
+def y_to_pixel_y(y):
+	"""
+	Compute the horizontal pixel position for vertical 
+	position :param:y in the plotted coordinate system
+
+	Test Cases:
+
+	y =  0 should correspond to the middle of the plot
+	>>> y_to_pixel_y(0)
+	200
+
+	y=10 should correspond to the top of the plot.
+	>>> y_to_pixel_y(10)
+	0
+
+	y=-10 should correspond to the bottom of the plot
+	Note y=-10 is actually outside of the plotting area
+	>>> y_to_pixel_y(-10)
+	400
+	"""
+	v_pixel_per_point = PLOT_HEIGHT / (Y_MAX - Y_MIN)
+	py = PLOT_HEIGHT/2 - y * v_pixel_per_point
+	return int(py)
+
+
+def draw_axes(plot):
+	"""
+	Draw the horizontal and vertical axes
+	"""
+	draw_x_axis(plot)
+	draw_y_axis(plot)
+	return plot
+
+
+def draw_x_axis(plot):
+	"""
+	Draw the horizontal axis
+	Set of points for which (x, 0) where x in [X_MIN, XMAX[ (x-max not included)
+	"""
+	x = X_MIN
+	while x<X_MAX:
+		px = x_to_pixel_x(x)
+		py = y_to_pixel_y(0)
+		pixel = plot.get_pixel(px, py)
+		pixel.red = AXIS_COLOR_R
+		pixel.green = AXIS_COLOR_G
+		pixel.blue = AXIS_COLOR_B
+		x+=DELTA_X
+	return plot
+
+
+def draw_y_axis(plot):
+	"""
+	Draw the vertical axis
+	Set of points for which (0, y) where x in ]Y_MIN, Y_MAX] (Y_MIN not included)
+	"""
+	y = Y_MIN + DELTA_Y
+	while y<Y_MAX:
+		px = x_to_pixel_x(0)
+		py = y_to_pixel_y(y)
+		pixel = plot.get_pixel(px, py)
+		pixel.red = AXIS_COLOR_R
+		pixel.green = AXIS_COLOR_G
+		pixel.blue = AXIS_COLOR_B
+		y += DELTA_Y
+	return plot
+
+
+def plot_function(plot):
+	"""
+	Draw the points of the function defined by plotted_function()
+	that are in range
+	"""
+	x = X_MIN
+	while x < X_MAX:
+		y = ploted_function(x)
+		if y > Y_MIN and y <= Y_MAX:
+			px = x_to_pixel_x(x)
+			py = y_to_pixel_y(y)
+			pixel = plot.get_pixel(px, py)
+			pixel.red = PLOT_COLOR_R
+			pixel.green = PLOT_COLOR_G
+			pixel.blue = PLOT_COLOR_B
+
+		x += DELTA_X
+	return plot
+
+
+if __name__ == '__main__':
+	main()
+
+ + + + +
+
+
+
+ + diff --git a/en/graphing-functions/inv.png b/en/graphing-functions/inv.png new file mode 100644 index 0000000000000000000000000000000000000000..4f041a4349c1f42548df3bb101167b4642aea6c1 GIT binary patch literal 6320 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 T$cYD$uU)ro-ENv^;(q8~4=J|$ literal 0 HcmV?d00001 diff --git a/en/graphing-functions/square.png b/en/graphing-functions/square.png new file mode 100644 index 0000000000000000000000000000000000000000..7b71505a1e536ff32b008164f02e32f14f4805d6 GIT binary patch literal 5581 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 literal 0 HcmV?d00001 diff --git a/examples/graphing-functions/coordinate_systems.png b/examples/graphing-functions/coordinate_systems.png new file mode 100644 index 0000000000000000000000000000000000000000..2b983c30a518777aad38b106f89d4d90b3b09b28 GIT binary patch literal 63556 zcmeFZWmuE_8#gW}p`-;85+c%|Ak6?pr6i=0773{#HEM(bC@Ba?Bi%?&Hbw{tf|M}Q zF}k}M8~a~~x8C>f&Hs7zym~keIL5VW-#EYL`8hvlTzjLbu1Ix`@!Y9Xr>K;b?rEJm zbs7i!%9E1J;}oOLKEA zWq$593k!4ewoX2tb1o3AkdQDfbN{vm>Q}XtPbkm5`PM=bK|~}g&q;Zc@v<-CYXf

QXwB*tmbXZ9w_%1r5a~3M(W; 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 literal 0 HcmV?d00001 diff --git a/examples/graphing-functions/cos.png b/examples/graphing-functions/cos.png new file mode 100644 index 0000000000000000000000000000000000000000..01e6ba0c6361f21fe4e5b4bf01838a9ace30dc4c GIT binary patch literal 6424 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 literal 0 HcmV?d00001 diff --git a/examples/graphing-functions/credit.txt b/examples/graphing-functions/credit.txt new file mode 100644 index 0000000..ff5399b --- /dev/null +++ b/examples/graphing-functions/credit.txt @@ -0,0 +1 @@ +Problem written by Moussa Doumbouya \ No newline at end of file diff --git a/examples/graphing-functions/cube.png b/examples/graphing-functions/cube.png new file mode 100644 index 0000000000000000000000000000000000000000..a4c12b82dd8f78367cd86f0b230bc06bcb97a418 GIT binary patch literal 6331 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 + In this exercice, you are going to write a program that creates the graphical representation of a function of your choice. Like the followings: +

+ +

+

+
+
+ y = math.cos(x) + +
+ +
+ y = 1/x + +
+ +
+ y = x ** 3 + +
+ +
+
+

+ +

+ This is done by findng the pixels that correspond to (x, y) points of the plotted function, and setting the color of those pixels to green. + The axes are also drawn in a similar fashion. +

+ + + +

Coordinate Systems

+

+

+
+
+ In order to plot functions, you will need to write functions that convert x and y positions from + the plot coordinate system to the pixel coordinate system (illustrated in the adjacent figure). + The starter code suggests the x_to_pixel_x() and y_to_pixel_y() functions for this purpose. The starter code also contains + "doctests" to help you check your implementation. You may run the test cases as follow:

+
python -m doctests your_file.py
+
+
+ +
+
+
+

+ +

Starter Code

+

+ A starter code is provided below. This contains useful constants and a suggested high level decomposition of the problem. +

+ +
+from simpleimage import SimpleImage
+import math
+
+# Domain of the plot
+X_MIN = -10
+X_MAX = 10
+
+# Range of the plot
+Y_MIN = -10
+Y_MAX = 10
+
+# Size of the plot in pixels
+PLOT_WIDTH = 400
+PLOT_HEIGHT = 400
+
+# Color of the axes
+AXIS_COLOR_R = 200
+AXIS_COLOR_G = 0
+AXIS_COLOR_B = 0
+
+# Color of the plot
+PLOT_COLOR_R = 0
+PLOT_COLOR_G = 200
+PLOT_COLOR_B = 0
+
+# x and y step sizes
+DELTA_X = 0.01
+DELTA_Y = 0.01
+
+
+def main():
+	"""
+	Make a blank plot, draw the x and y axis, plot the 
+	function defined by plotted_function and show the plot.
+	"""
+	plot = make_blank_plot()
+	plot = draw_axes(plot)
+	plot = plot_function(plot)
+	plot.show()
+
+
+def ploted_function(x):
+	"""
+	Compute the y value of the ploted function for the given :param:x value.
+	Implement a function of your choice
+	"""
+	return math.cos(x)
+
+
+def x_to_pixel_x(x):
+	"""
+	Compute the horizontal pixel position for horizontal 
+	position :param:x in the plotted coordinate system.
+
+	Test Cases: 
+
+	x = 0 should correspond to middle of the plot
+	>>> x_to_pixel_x(0)
+	200
+
+	x = -10 should correspond to far left of the plot
+	>>> x_to_pixel_x(-10)
+	0
+
+	x = 10 should correspond to far right of the plot
+	Note: x=10 is outside of the plotting area 
+	>>> x_to_pixel_x(10)
+	400
+	"""
+	
+	# TODO: Your code here
+	# calculate the pixel x position and store it in px
+
+	return int(px)
+
+
+def y_to_pixel_y(y):
+	"""
+	Compute the horizontal pixel position for vertical 
+	position :param:y in the plotted coordinate system
+
+	Test Cases:
+
+	y =  0 should correspond to the middle of the plot
+	>>> y_to_pixel_y(0)
+	200
+
+	y=10 should correspond to the top of the plot.
+	>>> y_to_pixel_y(10)
+	0
+
+	y=-10 should correspond to the bottom of the plot
+	Note y=-10 is actually outside of the plotting area
+	>>> y_to_pixel_y(-10)
+	400
+	"""
+	
+	# TODO: your code here
+	# Calculate the pixel y position and store it in py
+
+	return int(py)
+
+if __name__ == '__main__':
+	main()
+
+ + + diff --git a/examples/graphing-functions/inv.png b/examples/graphing-functions/inv.png new file mode 100644 index 0000000000000000000000000000000000000000..4f041a4349c1f42548df3bb101167b4642aea6c1 GIT binary patch literal 6320 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 T$cYD$uU)ro-ENv^;(q8~4=J|$ literal 0 HcmV?d00001 diff --git a/examples/graphing-functions/simpleimage.py b/examples/graphing-functions/simpleimage.py new file mode 100644 index 0000000..5038794 --- /dev/null +++ b/examples/graphing-functions/simpleimage.py @@ -0,0 +1,264 @@ +#!/usr/bin/env python3 + +""" +Stanford CS106AP SimpleImage + +Written by Nick Parlante, Sonja Johnson-Yu, and Nick Bowman. + -7/2019 version, has file reading, pix, foreach, hidden get/setpix + +SimpleImage Features: +Create image: + image = SimpleImage.blank(400, 200) # create new image of size + image = SimpleImage('foo.jpg') # create from file + +Access size + image.width, image.height + +Get pixel at x,y + pix = image.get_pixel(x, y) + # pix is RGB tuple like (100, 200, 0) + +Set pixel at x,y + image.set_pixel(x, y, pix) # set data by tuple also + +Get Pixel object at x,y + pixel = image.get_pixel(x, y) + pixel.red = 0 + pixel.blue = 255 + +Show image on screen + image.show() + +The main() function below demonstrates the above functions as a test. +""" + +import sys +# If the following line fails, "Pillow" needs to be installed +from PIL import Image + + +def clamp(num): + """ + Return a "clamped" version of the given num, + converted to be an int limited to the range 0..255 for 1 byte. + """ + num = int(num) + if num < 0: + return 0 + if num >= 256: + return 255 + return num + + +class Pixel(object): + """ + A pixel at an x,y in a SimpleImage. + Supports set/get .red .green .blue + and get .x .y + """ + def __init__(self, image, x, y): + self.image = image + self._x = x + self._y = y + + def __str__(self): + return 'r:' + str(self.red) + ' g:' + str(self.green) + ' b:' + str(self.blue) + + # Pillow image stores each pixel color as a (red, green, blue) tuple. + # So the functions below have to unpack/repack the tuple to change anything. + + @property + def red(self): + return self.image.px[self._x, self._y][0] + + @red.setter + def red(self, value): + rgb = self.image.px[self._x, self._y] + self.image.px[self._x, self._y] = (clamp(value), rgb[1], rgb[2]) + + @property + def green(self): + return self.image.px[self._x, self._y][1] + + @green.setter + def green(self, value): + rgb = self.image.px[self._x, self._y] + self.image.px[self._x, self._y] = (rgb[0], clamp(value), rgb[2]) + + @property + def blue(self): + return self.image.px[self._x, self._y][2] + + @blue.setter + def blue(self, value): + rgb = self.image.px[self._x, self._y] + self.image.px[self._x, self._y] = (rgb[0], rgb[1], clamp(value)) + + @property + def x(self): + return self._x + + @property + def y(self): + return self._y + + +# color tuples for background color names 'red' 'white' etc. +BACK_COLORS = { + 'white': (255, 255, 255), + 'black': (0, 0, 0), + 'red': (255, 0, 0), + 'green': (0, 255, 0), + 'blue': (0, 0, 255), +} + + +class SimpleImage(object): + def __init__(self, filename, width=0, height=0, back_color=None): + """ + Create a new image. This case works: SimpleImage('foo.jpg') + To create a blank image use SimpleImage.blank(500, 300) + The other parameters here are for internal/experimental use. + """ + # Create pil_image either from file, or making blank + if filename: + self.pil_image = Image.open(filename).convert("RGB") + if self.pil_image.mode != 'RGB': + raise Exception('Image file is not RGB') + self._filename = filename # hold onto + else: + if not back_color: + back_color = 'white' + color_tuple = BACK_COLORS[back_color] + if width == 0 or height == 0: + raise Exception('Creating blank image requires width/height but got {} {}' + .format(width, height)) + self.pil_image = Image.new('RGB', (width, height), color_tuple) + self.px = self.pil_image.load() + size = self.pil_image.size + self._width = size[0] + self._height = size[1] + self.curr_x = 0 + self.curr_y = 0 + + def __iter__(self): + return self + + def __next__(self): + if self.curr_x < self.width and self.curr_y < self.height: + x = self.curr_x + y = self.curr_y + self.increment_curr_counters() + return Pixel(self, x, y) + else: + self.curr_x = 0 + self.curr_y = 0 + raise StopIteration() + + def increment_curr_counters(self): + self.curr_x += 1 + if self.curr_x == self.width: + self.curr_x = 0 + self.curr_y += 1 + + @classmethod + def blank(cls, width, height, back_color=None): + """Create a new blank image of the given width and height, optional back_color.""" + return SimpleImage('', width, height, back_color=back_color) + + @classmethod + def file(cls, filename): + """Create a new image based on a file, alternative to raw constructor.""" + return SimpleImage(filename) + + @property + def width(self): + """Width of image in pixels.""" + return self._width + + @property + def height(self): + """Height of image in pixels.""" + return self._height + + def get_pixel(self, x, y): + """ + Returns a Pixel at the given x,y, suitable for getting/setting + .red .green .blue values. + """ + if x < 0 or x >= self._width or y < 0 or y >= self.height: + e = Exception('get_pixel bad coordinate x %d y %d (vs. image width %d height %d)' % + (x, y, self._width, self.height)) + raise e + return Pixel(self, x, y) + + def set_pixel(self, x, y, pixel): + if x < 0 or x >= self._width or y < 0 or y >= self.height: + e = Exception('set_pixel bad coordinate x %d y %d (vs. image width %d height %d)' % + (x, y, self._width, self.height)) + raise e + self.px[x, y] = (pixel.red, pixel.green, pixel.blue) + + def set_rgb(self, x, y, red, green, blue): + """ + Set the pixel at the given x,y to have + the given red/green/blue values without + requiring a separate pixel object. + """ + self.px[x, y] = (red, green, blue) + + def _get_pix_(self, x, y): + """Get pix RGB tuple (200, 100, 50) for the given x,y.""" + return self.px[x, y] + + def _set_pix_(self, x, y, pix): + """Set the given pix RGB tuple into the image at the given x,y.""" + self.px[x, y] = pix + + def show(self): + """Displays the image using an external utility.""" + self.pil_image.show() + + def make_as_big_as(self, image): + """Resizes image to the shape of the given image""" + self.pil_image = self.pil_image.resize((image.width, image.height)) + self.px = self.pil_image.load() + size = self.pil_image.size + self._width = size[0] + self._height = size[1] + + +def main(): + """ + main() exercises the features as a test. + 1. With 1 arg like flowers.jpg - opens it + 2. With 0 args, creates a yellow square with + a green stripe at the right edge. + """ + args = sys.argv[1:] + if len(args) == 1: + image = SimpleImage.file(args[0]) + image.show() + return + + # Create yellow rectangle, using foreach iterator + image = SimpleImage.blank(400, 200) + for pixel in image: + pixel.red = 255 + pixel.green = 255 + pixel.blue = 0 + + # for pixel in image: + # print(pixel) + + # Set green stripe using pix access. + pix = image._get_pix_(0, 0) + green = (0, pix[1], 0) + for x in range(image.width - 10, image.width): + for y in range(image.height): + image._set_pix_(x, y, green) + image.show() + + +if __name__ == '__main__': + main() diff --git a/examples/graphing-functions/soln.py b/examples/graphing-functions/soln.py new file mode 100644 index 0000000..a2ea603 --- /dev/null +++ b/examples/graphing-functions/soln.py @@ -0,0 +1,178 @@ +from simpleimage import SimpleImage +import math + +# Domain of the plot +X_MIN = -10 +X_MAX = 10 + +# Range of the plot +Y_MIN = -10 +Y_MAX = 10 + +# Size of the plot in pixels +PLOT_WIDTH = 400 +PLOT_HEIGHT = 400 + +# Color of the axes +AXIS_COLOR_R = 200 +AXIS_COLOR_G = 0 +AXIS_COLOR_B = 0 + +# Color of the plot +PLOT_COLOR_R = 0 +PLOT_COLOR_G = 200 +PLOT_COLOR_B = 0 + +# x and y step sizes +DELTA_X = 0.01 +DELTA_Y = 0.01 + + +def main(): + """ + Make a blank plot, draw the x and y axis, plot the + function defined by plotted_function and show the plot. + """ + plot = make_blank_plot() + plot = draw_axes(plot) + plot = plot_function(plot) + plot.show() + + +def ploted_function(x): + """ + Compute the ploted function at point :param:x + """ + # return math.cos(x) + # return math.tanh(x) + # return x**3 + return x ** 2 + + +def make_blank_plot(): + """ + Create an image with all pixel colors set to black + """ + plot = SimpleImage.blank(PLOT_WIDTH, PLOT_HEIGHT) + for px in plot: + px.red = 0 + px.green = 0 + px.blue = 0 + return plot + + +def x_to_pixel_x(x): + """ + Compute the horizontal pixel position for horizontal + position :param:x in the plotted coordinate system. + + Test Cases: + + x = 0 should correspond to middle of the plot + >>> x_to_pixel_x(0) + 200 + + x = -10 should correspond to far left of the plot + >>> x_to_pixel_x(-10) + 0 + + x = 10 should correspond to far right of the plot + Note: x=10 is outside of the plotting area + >>> x_to_pixel_x(10) + 400 + """ + h_pixel_per_point = PLOT_WIDTH / (X_MAX - X_MIN) + px = x * h_pixel_per_point + PLOT_WIDTH/2 + return int(px) + + +def y_to_pixel_y(y): + """ + Compute the horizontal pixel position for vertical + position :param:y in the plotted coordinate system + + Test Cases: + + y = 0 should correspond to the middle of the plot + >>> y_to_pixel_y(0) + 200 + + y=10 should correspond to the top of the plot. + >>> y_to_pixel_y(10) + 0 + + y=-10 should correspond to the bottom of the plot + Note y=-10 is actually outside of the plotting area + >>> y_to_pixel_y(-10) + 400 + """ + v_pixel_per_point = PLOT_HEIGHT / (Y_MAX - Y_MIN) + py = PLOT_HEIGHT/2 - y * v_pixel_per_point + return int(py) + + +def draw_axes(plot): + """ + Draw the horizontal and vertical axes + """ + draw_x_axis(plot) + draw_y_axis(plot) + return plot + + +def draw_x_axis(plot): + """ + Draw the horizontal axis + Set of points for which (x, 0) where x in [X_MIN, XMAX[ (x-max not included) + """ + x = X_MIN + while x Y_MIN and y <= Y_MAX: + px = x_to_pixel_x(x) + py = y_to_pixel_y(y) + pixel = plot.get_pixel(px, py) + pixel.red = PLOT_COLOR_R + pixel.green = PLOT_COLOR_G + pixel.blue = PLOT_COLOR_B + + x += DELTA_X + return plot + + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/examples/graphing-functions/square.png b/examples/graphing-functions/square.png new file mode 100644 index 0000000000000000000000000000000000000000..7b71505a1e536ff32b008164f02e32f14f4805d6 GIT binary patch literal 5581 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 literal 0 HcmV?d00001 diff --git a/examples/graphing-functions/title.txt b/examples/graphing-functions/title.txt new file mode 100644 index 0000000..33f8a63 --- /dev/null +++ b/examples/graphing-functions/title.txt @@ -0,0 +1 @@ +Graphing Functions \ No newline at end of file