From 3e9636377124eacd9e265b7b548b79fbec1ed757 Mon Sep 17 00:00:00 2001 From: "A.M. Rowsell" Date: Sun, 27 Jun 2021 15:40:30 -0400 Subject: [PATCH] Embedded the matplotlib in a GtkViewport. Still trying to work out the kinks, as only one plot is showing, and it's not updating with the sliders. I'll get there sooner or later. Also updated the gitignore, and added images showing the parametric equations used to calculate the graphs. Neat! --- .gitignore | 3 + img/epitrochoid.png | Bin 0 -> 30018 bytes img/hypotrochoid.png | Bin 0 -> 29827 bytes img/small_epitrochoid.png | Bin 0 -> 21011 bytes img/small_hypotrochoid.png | Bin 0 -> 20993 bytes spirographs.glade | 153 +++++++++++++++++++++++++++++++++++++ spirographs.py | 90 +++++++++++++++------- 7 files changed, 217 insertions(+), 29 deletions(-) create mode 100644 img/epitrochoid.png create mode 100644 img/hypotrochoid.png create mode 100644 img/small_epitrochoid.png create mode 100644 img/small_hypotrochoid.png create mode 100644 spirographs.glade diff --git a/.gitignore b/.gitignore index b13ff3b..9e3c124 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ +# don't track temporary files +*~ + # Created by https://www.toptal.com/developers/gitignore/api/kdevelop4 # Edit at https://www.toptal.com/developers/gitignore?templates=kdevelop4 diff --git a/img/epitrochoid.png b/img/epitrochoid.png new file mode 100644 index 0000000000000000000000000000000000000000..fc17c8c712c92cc26428b97fb2a88ea70e07f13a GIT binary patch literal 30018 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 vf!>E$3 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

t-(v+ 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 X;%|c!4MbY;VrgsYpUwN{!ma-Y4jG9K literal 0 HcmV?d00001 diff --git a/img/hypotrochoid.png b/img/hypotrochoid.png new file mode 100644 index 0000000000000000000000000000000000000000..fc1ed1e81cd0b44090854f936989686158a934f6 GIT binary patch literal 29827 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 N)iyktrFr(|{{UbXX{`VN literal 0 HcmV?d00001 diff --git a/img/small_epitrochoid.png b/img/small_epitrochoid.png new file mode 100644 index 0000000000000000000000000000000000000000..9602f6162543dd7c95aefcc568d6e2b9c821c6de GIT binary patch literal 21011 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 W{E%AP>8O(|fR5%ZjiQ@&VgCRPcqPLC literal 0 HcmV?d00001 diff --git a/spirographs.glade b/spirographs.glade new file mode 100644 index 0000000..d155178 --- /dev/null +++ b/spirographs.glade @@ -0,0 +1,153 @@ + + + + + + 0.10 + 100 + 0.10 + 0.10 + 1 + + + + 0.10 + 100 + 0.10 + 0.10 + 1 + + + + 0.10 + 100 + 0.10 + 0.10 + 1 + + + + False + + + + + True + False + 10 + True + + + True + True + bigRadiusAdjustment + True + 100 + 1 + + + 1 + 1 + + + + + True + True + smallRadiusAdjustment + True + 100 + 1 + + + 1 + 2 + + + + + True + True + distanceAdjustment + True + 100 + 1 + + + 1 + 3 + + + + + True + False + Big Radius (R): + + + 0 + 1 + + + + + True + False + Small Radius (r): + + + 0 + 2 + + + + + True + False + Distance (d): + + + 0 + 3 + + + + + True + False + img/small_epitrochoid.png + + + 0 + 4 + + + + + True + False + img/small_hypotrochoid.png + + + 1 + 4 + + + + + True + False + + + + + + 0 + 0 + 2 + + + + + + diff --git a/spirographs.py b/spirographs.py index 18d6c75..e5796d2 100644 --- a/spirographs.py +++ b/spirographs.py @@ -1,53 +1,86 @@ +# -*- coding: utf-8 -*- + +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + # gtk imports import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk, Gdk, GObject, GLib # math/plot imports +from matplotlib.backends.backend_gtk3agg import ( + FigureCanvasGTK3Agg as FigureCanvas) +from matplotlib.figure import Figure import numpy as np -import matplotlib.pyplot as plt import math import sys class spirographs: - - - def calcEpiX(theta, bigRadius, smallRadius, distance): - return ((bigRadius + smallRadius) * math.cos(theta)) - (distance * math.cos(((bigRadius + smallRadius)/(smallRadius))*theta)) - - def calcEpiY(theta, bigRadius, smallRadius, distance): - return ((bigRadius + smallRadius) * math.sin(theta)) - (distance * math.sin(((bigRadius + smallRadius)/(smallRadius))*theta)) - - def calcHypoX(theta, bigRadius, smallRadius, distance): - return ((bigRadius - smallRadius) * math.cos(theta)) + (distance * math.cos(((bigRadius - smallRadius)/(smallRadius))*theta)) - - def calcHypoY(theta, bigRadius, smallRadius, distance): - return ((bigRadius - smallRadius) * math.sin(theta)) - (distance * math.sin(((bigRadius - smallRadius)/(smallRadius))*theta)) - def __init__(self): self.bigRadius = 12 self.smallRadius = 5 self.distance = 4 - self.highestTheta = (np.lcm(smallRadius, bigRadius)/bigRadius) * 2 * math.pi - self.stepSize = highestTheta / 4096 + self.highestTheta = (np.lcm(self.smallRadius, self.bigRadius)/self.bigRadius) * 2 * math.pi + self.stepSize = self.highestTheta / 4096 self.recalcPoints() self.showPlot() + def calcEpiX(self, theta): + return ((self.bigRadius + self.smallRadius) * math.cos(theta)) - (self.distance * math.cos(((self.bigRadius + self.smallRadius)/(self.smallRadius))*theta)) + + def calcEpiY(self, theta): + return ((self.bigRadius + self.smallRadius) * math.sin(theta)) - (self.distance * math.sin(((self.bigRadius + self.smallRadius)/(self.smallRadius))*theta)) + + def calcHypoX(self, theta): + return ((self.bigRadius - self.smallRadius) * math.cos(theta)) + (self.distance * math.cos(((self.bigRadius - self.smallRadius)/(self.smallRadius))*theta)) + + def calcHypoY(self, theta): + return ((self.bigRadius - self.smallRadius) * math.sin(theta)) - (self.distance * math.sin(((self.bigRadius - self.smallRadius)/(self.smallRadius))*theta)) + + def onDestroy(self, widget): + Gtk.main_quit() + return + + def bigRadiusAdjustment_value_changed_cb(self, widget): + self.bigRadius = widget.get_value() + self.recalcPoints() + self.updatePlot() + + def smallRadiusAdjustment_value_changed_cb(self, widget): + self.smallRadius = widget.get_value() + self.recalcPoints() + self.updatePlot() + + def distanceAdjustment_value_changed_cb(self, widget): + self.distance = widget.get_value() + self.recalcPoints() + self.updatePlot() + def recalcPoints(self): - self.epiX = np.array([calcEpiX(i, bigRadius, smallRadius, distance) for i in np.arange(0, highestTheta, stepSize)]) - self.epiY = np.array([calcEpiY(i, bigRadius, smallRadius, distance) for i in np.arange(0, highestTheta, stepSize)]) - self.hypoX = np.array([calcHypoX(i, bigRadius, smallRadius, distance) for i in np.arange(0, highestTheta, stepSize)]) - self.hypoY = np.array([calcHypoY(i, bigRadius, smallRadius, distance) for i in np.arange(0, highestTheta, stepSize)]) + self.epiX = np.array([self.calcEpiX(i) for i in np.arange(0, self.highestTheta, self.stepSize)]) + self.epiY = np.array([self.calcEpiY(i) for i in np.arange(0, self.highestTheta, self.stepSize)]) + self.hypoX = np.array([self.calcHypoX(i) for i in np.arange(0, self.highestTheta, self.stepSize)]) + self.hypoY = np.array([self.calcHypoY(i) for i in np.arange(0, self.highestTheta, self.stepSize)]) def showPlot(self): - plt.subplot(1, 2, 1) - plt.title(f"Epichondroid of {bigRadius}, {smallRadius}, {distance}") - plt.plot(epiX, epiY) - plt.subplot(1, 2, 2) - plt.title(f"Hypochondroid of {bigRadius}, {smallRadius}, {distance}") - plt.plot(hypoX, hypoY) - plt.show() + viewport = builder.get_object('plotViewport') + self.plotFigure = Figure(figsize=(5, 4), dpi=100) + self.subPlot1 = self.plotFigure.add_subplot() + #self.subPlot1.title = f"Epichondroid of {self.bigRadius}, {self.smallRadius}, {self.distance}" + self.subPlot1.plot(self.epiX, self.epiY) + self.subPlot2 = self.plotFigure.add_subplot() + #self.subPlot2.title = f"Hypochondroid of {self.bigRadius}, {self.smallRadius}, {self.distance}" + self.subPlot2.plot(self.hypoX, self.hypoY) + self.canvas = FigureCanvas(self.plotFigure) + self.canvas.set_size_request(800, 600) + viewport.add(self.canvas) + + def updatePlot(self): + self.subPlot1.plot(self.epiX, self.epiY) + self.subPlot2.plot(self.hypoX, self.hypoY) builder = Gtk.Builder() builder.add_from_file("spirographs.glade") @@ -57,4 +90,3 @@ window = builder.get_object("spWindow") window.show_all() Gtk.main() -