[genius] Tue Apr 18 12:36:00 2017 Jiri (George) Lebl <jirka 5z com>



commit 481d6b889bac065d9086b24c39a01ca35bb09e80
Author: Jiri (George) Lebl <jiri lebl gmail com>
Date:   Tue Apr 18 12:36:21 2017 -0500

    Tue Apr 18 12:36:00 2017  Jiri (George) Lebl <jirka 5z com>
    
        * examples/vibrating-drum-modes.gel: optionally draw node lines.

 ChangeLog                             |    4 +++
 examples/vibrating-drumhead-modes.gel |   39 ++++++++++++++++++++++++++++++++-
 2 files changed, 42 insertions(+), 1 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 77185e3..a6dde3c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+Tue Apr 18 12:36:00 2017  Jiri (George) Lebl <jirka 5z com>
+
+       * examples/vibrating-drum-modes.gel: optionally draw node lines.
+
 Mon Apr 17 13:17:45 2017  Jiri (George) Lebl <jirka 5z com>
 
        * examples/vibrating-drumhead-modes.gel: again do 10 r increments,
diff --git a/examples/vibrating-drumhead-modes.gel b/examples/vibrating-drumhead-modes.gel
index 71a7e8a..71af94f 100644
--- a/examples/vibrating-drumhead-modes.gel
+++ b/examples/vibrating-drumhead-modes.gel
@@ -28,33 +28,55 @@ knm = [2.4048, 5.5201, 8.6537
        3.8317, 7.0156, 10.1735
        5.1356, 8.4172, 11.6198];
 
+node_lines = null;
+
+function node_circle(r) = r*[cos(0:2*pi/ceil(r*40):2*pi);sin(0:2*pi/ceil(r*40):2*pi);0]';
+
 if the_answer == 1 then (
   n = 0;
   k = knm@(n+1,1);
 ) else if the_answer == 2 then (
   n = 0;
   k = knm@(n+1,2);
+  node_lines@(1) = node_circle(knm@(n+1,1)/k);
 ) else if the_answer == 3 then (
   n = 0;
   k = knm@(n+1,3);
+  node_lines@(1) = node_circle(knm@(n+1,1)/k);
+  node_lines@(2) = node_circle(knm@(n+1,2)/k);
 ) else if the_answer == 4 then (
   n = 1;
   k = knm@(n+1,1);
+  node_lines@(1) = [0,-1,0;0,1,0];
 ) else if the_answer == 5 then (
   n = 1;
   k = knm@(n+1,2);
+  node_lines@(1) = [0,-1,0;0,1,0];
+  node_lines@(2) = node_circle(knm@(n+1,1)/k);
 ) else if the_answer == 6 then (
   n = 1;
   k = knm@(n+1,3);
+  node_lines@(1) = [0,-1,0;0,1,0];
+  node_lines@(2) = node_circle(knm@(n+1,1)/k);
+  node_lines@(3) = node_circle(knm@(n+1,2)/k);
 ) else if the_answer == 7 then (
   n = 2;
   k = knm@(n+1,1);
+  node_lines@(1) = (1/sqrt(2))*[-1,-1,0;1,1,0];
+  node_lines@(2) = (1/sqrt(2))*[1,-1,0;-1,1,0];
 ) else if the_answer == 8 then (
   n = 2;
   k = knm@(n+1,2);
+  node_lines@(1) = (1/sqrt(2))*[-1,-1,0;1,1,0];
+  node_lines@(2) = (1/sqrt(2))*[1,-1,0;-1,1,0];
+  node_lines@(3) = node_circle(knm@(n+1,1)/k);
 ) else if the_answer == 9 then (
   n = 2;
   k = knm@(n+1,3);
+  node_lines@(1) = (1/sqrt(2))*[-1,-1,0;1,1,0];
+  node_lines@(2) = (1/sqrt(2))*[1,-1,0;-1,1,0];
+  node_lines@(3) = node_circle(knm@(n+1,1)/k);
+  node_lines@(4) = node_circle(knm@(n+1,2)/k);
 ) else (
   # Superposition
   n = -1; # signals superposition
@@ -76,6 +98,14 @@ if the_answer == 1 then (
   k3 = knm@(n3+1,1);
 );
 
+if not IsNull(node_lines) and 
+   1 == AskButtons("Draw node lines over the graph?",
+                        "yes", "no") then (
+  draw_node_lines = true
+) else (
+  draw_node_lines = false
+);
+
 SurfacePlotDrawLegends = false; # don't draw the legend
 PlotWindowPresent(); # Make sure the window is raised
 
@@ -95,7 +125,14 @@ if n >= 0 then (
     );
 
     # Plot the data
-    SurfacePlotData(data,[-1,1,-1,1,-1,1])
+    PlotCanvasFreeze();
+    SurfacePlotData(data,[-1,1,-1,1,-1,1]);
+    if draw_node_lines then (
+      for nline in node_lines do (
+        SurfacePlotDrawLine(nline,"color","blue","thickness",3)
+      )
+    );
+    PlotCanvasThaw();
   )
 ) else (
   for t=0.0 to 30.0 by 0.03 do (


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]