Good Evening,
It was a much less gloomy week. In fact it was downright sunny.
Cold though, at least for here. Last night it dropped into the high
teens. It did get above freezing today but not by much. The bird basin
has not thawed. The elk have carved a new path just inside a younger
stand of trees nearby. The hunters have been plentiful so they change
their habits and don't cross the roads until well after dark.
The sun is quite speckled, active with current and impending
events. The sunspot number and the solar flux are both high, 184 and
178 respectively. We are also in the midst of the CQ WW DX contest. I
may not be able to find an open space for the twenty meter net.
However, the contest will terminate right at the forty meter net's
time. Again, I will seek an open frequency.
Please join us on (or near):
14050 kHz at 2300z Sunday (3 PM PST Sunday)
7047 kHz at 0100z Monday (5 PM PST Sunday)
73,
Kevin. KD5ONS
-
I am teaching a multi-layered, cylindrical, spring-node mesh how to
be elastic. These are the elastic functions, based on Hooke's law and
Newton's first. I will merge a few of the loops to hasten recovery
time. I have implemented a heat gradient function for various heating
(cooling) geometries to add some color. Now to invent some creative
impulse functions to deform the mesh.
float Req = 15.0; // Radial
equilibrium spacing between nodes
float Teq = 10.0; // Torsion
spring spacing at equilibrium
float Aeq = 20.0; // Axial spring
spacing
void map( void ) // accumulate
applied forces
{
float RLc, RGc, TLc, TGc; // local, global
change rotation, torsion
struct node *tmp; // shorten name
struct node *m1 = m1head; // M1 node buffer
// Axial
struct pt L, R; // left,
right force vectors
float Ka = 0.95; // Axial
spring constant
for(int k=0; k for(int j=1; jguard ends
for(int i=0; i L = vecMinusVec( tmp->X, (m1 +k*leng*ring +(j-1)*ring
+i)->X );
R = vecMinusVec( tmp->X, (m1 +k*leng*ring +(j+1)*ring
+i)->X );
float mag1 = Aeq - length( L ); // L magnitude
float mag2 = Aeq - length( R ); // R magnitude
tmp->FA = vecMult( vecPlusVec( scale( L, mag1 ), scale(
R, mag2 ) ), Ka );
}
// Radial
struct pt C; // center
of this ring
struct pt N; //
temporary line segment
struct pt In, Out; // vector to
inner, vector to outer
float Kr = 0.33; // radial
spring constant
for(int k=0; kX.x, 0, 0); // at i=0;
for(int i=0; icylinder
{
// Extract node location
N = (m1 +k*leng*ring +j*ring +i)->X;
// Difference between N and the next inner cylinder
if( k==0 )
In = vector(0.0, 0.0, 0.0); // inner node
else
In = vecMinusVec( N, (m1 +(k-1)*leng*ring +j*ring
+i)->X );
// Difference between N and the next outer cylinder
if( k==thick-1 )
Out = vector( 0.0, 0.0, 0.0 ); // outer node
else
Out = vecMinusVec( (m1 +(k+1)*leng*ring +j*ring
+i)->X, N );
// Calculate local and global differences
RLc = length( Out ) - length( In );
RGc = (r0 +k*Req) - length( vecMinusVec( N, C ) );
// Radial restoring force
(m1 +k*leng*ring +j*ring +i)->Fr = Kr * ( RGc + RLc );
}
}
// Torsional
float Dm, Dp; // angle to
neighbor -/+ directions
float Kt = 0.37; //
torsional spring constant
for(int k=0; k for(int j=0; jcylinder
for(int i=0; icylinder
{ // { 0 <= ring <= 35 }
if( i-1 == -1 ) // guard
-1 = 35 -1 = ring-1
Dm = (360.0 + (m1 +k*leng*ring +j*ring)->pa) - (m1
+k*leng*ring +j*ring+35)->pa;
else // angular distance to previous node
Dm = (m1 +k*leng*ring +j*ring +i)->pa - (m1
+k*leng*ring +j*ring +i-1)->pa;
if( i+1 == ring ) // guard
36 = 0 i+1 = 36
Dp = (360.0 + (m1 +k*leng*ring +j*ring)->pa) - (m1
+k*leng*ring