<jupyter_start><jupyter_text>FrisPy Test Notebook:This is a trial notebook to work out how to help <NAME> access the tools in frispy successfully and plot the path of said frisbee.  DependenciesThese are the typical dependencies I need. Not sure whether I need numpy at this point but no loss in having it available.<jupyter_code>from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np

import frispy<jupyter_output><empty_output><jupyter_text>Initial Frisbee Conditions:This array \[str,float\] defines the initial conditions for the frisbee. The default initial conditions are ```initCond = {            "x": 0,            "y": 0,            "z": 1.,            "vx": 10.0,            "vy": 0,            "vz": 0,            "phi": 0,            "theta": 0,            "gamma": 0,            "dphi": 0,            "dtheta": 0,            "dgamma": 62.0,        }``` Needed StillI need to clarify what all the angular variables are at the end. The first 6 are pretty clear bout after that I'm confused. Could just make a bunch of plots and try to figure it out. Easier, probably, to go read the code:)<jupyter_code>initCond = {
            "x": 0,
            "y": 2,
            "z": 1.5,
            "vx": 10.0,
            "vy": 5.,
            "vz": 0,
            "phi": 0,
            "theta": 0,
            "gamma": 0,
            "dphi": 0,
            "dtheta": 0,
            "dgamma": 62.0,
        }

disc = frispy.Disc(None, None, initCond)

result = disc.compute_trajectory()
times = result.times
xR, yR, zR = result.x, result.y, result.z<jupyter_output><empty_output><jupyter_text>Find Variable LimitsIt's helpful if the plot limits are self organizing as we try different initial conditions. numpy has max, min, truncate, and length tools for sorting this out. For now I'll find the max, truncate it (drop the decimals), and add 1 to get the upper limit.<jupyter_code>xMax, yMax, zMax = np.trunc(np.max(xR))+1,np.trunc(np.max(yR))+1,np.trunc(np.max(zR))+1
print("Upper Limits (x,y,z): %.2f ; %.2f ; %.2f ;" % (xMax, yMax, zMax))
numTimes = times.size
print("Number of Times: ", numTimes)<jupyter_output>Upper Limits (x,y,z): 3.00 ; 5.00 ; 2.00 ;
Number of Times:  28<jupyter_text>3D PlotsI borrowed the plotting structure from the 3DVectorTests notebook in the ENGR212 github. This is not so complicated but it did ease the process. (more commentary needed to clarify plot parameters which are mostly set by hand at the moment)<jupyter_code># Plotting
fig = plt.figure(figsize = (16,12))
ax = fig.add_subplot(111,projection='3d')

# this plots the results of .compute_trajectory with the 'shadow' along the ground
ax.plot(xR, yR, zR, color='red') 
ax.plot(xR, yR, 0, color='black', linestyle = 'dashed', alpha = 0.6) 

#ax.set_title('Path of Frisbee') 
# a more explicit way to set labels
ax.set_xlabel('x position (m)', fontsize = 10)
ax.set_ylabel('y position (m)', fontsize = 10)
ax.zaxis.set_rotate_label(False) 
ax.set_zlabel('z: height (m)', fontsize = 10, rotation = 90)
ax.set_title('Path of Frisbee', fontsize = 20)

ax.set_xlim(0,xMax)
ax.set_ylim(0,yMax)
ax.set_zlim(0,zMax)
ax.view_init(elev=15., azim=50)

# Commented out savefig for when I'm ready to save the plot for the lecture notes.
# plt.savefig('images/generalcoords.png')
plt.show()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.12046748576565777, 'fraction_numerical': 0.02607132154629907, 'mean_word_length': 3.2306717363751583, 'pattern_counts': {'":': 24, '<': 17, '<?xml version=': 0, '>': 17, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '4', 'dir': 'jupyter-structured-clean-dedup', 'id': '311498', 'license': 'MIT', 'n_tokens_mistral': 1207, 'n_tokens_neox': 1119, 'n_words': 386, 'path': 'FrispyExplorationsII.ipynb', 'repo_name': 'smithrockmaker/PH213', 'size': '3339'}