pyDome updates: tangential and spoke angles

In a previous post, I introduced pyDome, a Python program for calculating geodesic dome vertices, chords, and faces. I have since added two hub angle computations to the program, and report on that progress here. Face angle calculations still need to be implemented.

truncated_qcad_focused
Example output in DXF format.

Angles Between Chords and the Hub Tangent Plane

The angle between a chord and the plane tangent to the sphere at the chord’s hub measures the amount of inward deflection a hub spoke for that chord must make. The following diagram illustrates this idea:

tangent_angle_image_CROPPED

In this image, the view is directly facing the side of the tangent plane, so that it appears as a line. Two chords are shown here for illustrative purposes, but there are actually either five or six chords for a hub depending on the hub’s position in the geodesic sphere.

The program now reports these angles for each hub as part of the standard output:

STDOUT_tangent_angles

As expected, these are small angles.

Angles of Chords Around the Hub

The other hub angles considered here are the angles between chords centered around a hub. Here we first project the chords onto the tangent plane, then select one of the chords as a reference, and then report the angle between the projected reference chord and each other projected chord. I call these angles “spoke” angles. The following image illustrates the idea:

spoke_angle_image_CROPPED

Here the view is orthogonal to the sphere’s tangent plane defined at the hub. (This is the same tangent plane as that used above).

The program reports these angles in its standard output:

STDOUT_spoke_angles

Code

pyDome’s source code, which implements these new angle reporting features, is available from GitHub at https://github.com/badassdatascience/pyDome. HTML code for drawing the graphics shown above follows:

<svg width="500" height="500">
  <circle cx="250" cy="250" r="5" stroke="black" fill="black"/>
  <line x1="250" y1="250" x2="210" y2="150" style="stroke:rgb(0,0,0);stroke-width:3;"/>
  <line x1="250" y1="250" x2="210" y2="350" style="stroke:rgb(0,0,0);stroke-width:3;"/>
  <line x1="250" y1="160" x2="250" y2="340" style="stroke:blue;stroke-width:2;"/>
  <path d="M250 200 A10,10 0 0,0 230,200" stroke="green" style="fill:none;"/>
  <path d="M250 300 A10,10 0 0,1 230,300" stroke="green" style="fill:none;"/>
  <text x="260" y="255" fill="black">Hub</text>
  <text x="170" y="145" fill="black">Chord</text>
  <text x="240" y="155" fill="blue">Tangent Plane</text>
  <text x="255" y="200" fill="green">Angle to Tangent Plane</text>
</svg>
<svg width="500" height="500">
  <circle cx="250" cy="250" r="5" stroke="black" fill="black"/>
  <line x1="250" y1="250" x2="375" y2="250" style="stroke:rgb(0,0,0);stroke-width:3;"/>
  <line x1="250" y1="250" x2="289" y2="369" style="stroke:rgb(0,0,0);stroke-width:3;"/>
  <line x1="250" y1="250" x2="149" y2="323" style="stroke:rgb(0,0,0);stroke-width:3;"/>
  <line x1="250" y1="250" x2="149" y2="177" style="stroke:rgb(0,0,0);stroke-width:3;"/>
  <line x1="250" y1="250" x2="289" y2="131" style="stroke:rgb(0,0,0);stroke-width:3;"/>
  <path d="M263,210 A32,32 0 0,0 216,274" fill="none" stroke="blue" stroke-width="5" />
  <text x="260" y="267" fill="black">Hub</text>
  <text x="110" y="250" fill="blue">Spoke Angle</text>
  <text x="250" y="120" fill="black">Reference Chord/Spoke</text>
  <text x="110" y="340" fill="black">Chord/Spoke</text>
</svg>

Post Author: badassdatascience

Leave a Reply

Your email address will not be published.