Saturday, August 6, 2011

More interesting things!

I have, over the course of the winter, been forging a Ring of Power. I haven't discussed it here because I wanted to keep its great importance a secret, but now the cat's mostly out of the bag; you see, I'm having one made that fits my finger (the fourth from the thumb on the left hand) and one that fits Rachael's.

Here's a few screenshots of the (nearly final) computer model:

Its a mobius ring with a triangular crossection. Rachael had brought up the idea of having a mobius strip ring like this, but I wasn't a fan of how the curve isn't continuous. I figured a two sided strip with a continious curve wouln't result in a very wearable ring, but I figured one with three might be more so. I made a few models out of wax and clay years ago, and vaugely dreamed of having enough mathematical sophistication to construct it perfectly, and over the course of serveral months this winter and spring I finally worked it out. I experimented with a lot of stuff and eventually settled on some matrix transformation methods. Reading some stuff like this may have helped: Mobius ring

The great Belgian Dutch smiths at Shapeways have taken this excretion of my mindgrapes and turned it into a physical object!Actually, several of them. Above is the (nearly) latest draft prototype, made from plastic. I had a bunch made so that I could be sure of the sizing, each one a millimeter smaller than the one previous. It is, as I'm sure you're keen to notice, too thick to be a comfortable ring; a fact that I realized moments after I order this batch. The next batch of more wearable rings is currently hurtling though space aboard an aeroplane as we speak, I believe.

The previous incarnation of the Ring, which finished its long journey to me back in May, is here:

As you can see, this one is totally metal. Its made of silver, and I basically drew it in Sketchup. This was before I figured out all the mathemagic that's required to make it have smooth sides and make it easily realizable. The segmented versions took about five hours each for me to draw, with only sixteen segments. I saw the futility of my Sketchy-ways, and decided to take the plunge and write a program to render it with whatever variations I wanted.

And here it is! Its written in Matlab; I may at some point re-write it in something cooler.

%make mobius ring

num_segments = 360;
side_length = pi()/10;
circumradius = 1/2 * side_length *csc(pi()/3) ;
%circumfrence = 4.7; %5.1 results in 5.3 effectively
circumfrence = 5.0; %5.3 results in 5.5

inradius = 1/2 * side_length *cot(pi()/3);
radius = (circumfrence / (2 * pi))+circumradius;
% stretch=1.61803399; %phi
stretch=2.71828183; %e

starting_plane = [circumradius*sin(0/(180/pi())), circumradius*cos(0/(180/pi())), 0
circumradius*sin(120/(180/pi())), circumradius*cos(120/(180/pi())), 0
circumradius*sin(240/(180/pi())), circumradius*cos(240/(180/pi())), 0];
translation = zeros(3);
twist = 120;
theta_z = (twist / num_segments)/(180/pi());
theta_y = (360/num_segments)/(180/pi());
theta_yi= theta_y;
row = 4;
for i = 1:(num_segments)
theta_zi= i * theta_z;
Rz=[cos(theta_zi), -sin(theta_zi), 0
sin(theta_zi), cos(theta_zi), 0
0, 0, 1];
new_plane = new_plane + translation;
theta_yi= theta_yi + theta_y;
Ry= [cos(theta_yi), 0, sin(theta_yi)
0, 1, 0
-sin(theta_yi), 0, cos(theta_yi)];
new_plane = new_plane*Ry;
row = row+3;

S = [1 0 0
0 stretch 0
0 0 1];
vertices = vertices * S;

connections = zeros(num_segments*3,3);
con_2 = connections;
con_3 = connections;
for i =1:num_segments*3;
con_2(i,3) = con_2(i,1)-1;
con_2(i,2) = con_2(i,1)+2;
for i =1:num_segments*3;
con_3(i,3) = con_3(i,1)+2;
con_3(i,2) = con_3(i,1)+3;
connections = cat(1,con_2, con_3);
connections = mod(connections, ((num_segments*3)));
num_connections = size(connections);
num_connections = num_connections(1);

row = 1;
for i = 1:(triangles_count/3)
a = vertices((connections(row)+1), :);
b = vertices((connections(row + 1)+1), :);
c = vertices((connections(row + 2)+1), :);
AB = [(b(1)-a(1)), (b(2)-a(2)), (b(3)-a(3))];
AC = [(c(1)-a(1)), (c(2)-a(2)), (c(3)-a(3))];
%do crossproduct;
n = cross(AB,AC);
for j = row:(row+3)
normals(j,:) = n;
row = row + 3;

axis([-4 4 -4 4 -4 4]);

No comments: