Welcome
Username or Email:

Password:


Missing Code




[ ]
[ ]
Online
  • Guests: 100
  • Members: 0
  • Newest Member: omjtest
  • Most ever online: 396
    Guests: 396, Members: 0 on 12 Jan : 12:51
Members Birthdays:
All today's birthdays', congrats!
Capper (60)
cereus (73)
Mcanderson (43)


Next birthdays
11/06 dan (37)
11/06 rchydro (64)
11/06 CapRack (30)
Contact
If you need assistance, please send an email to forum at 4hv dot org. To ensure your email is not marked as spam, please include the phrase "4hv help" in the subject line. You can also find assistance via IRC, at irc.shadowworld.net, room #hvcomm.
Support 4hv.org!
Donate:
4hv.org is hosted on a dedicated server. Unfortunately, this server costs and we rely on the help of site members to keep 4hv.org running. Please consider donating. We will place your name on the thanks list and you'll be helping to keep 4hv.org alive and free for everyone. Members whose names appear in red bold have donated recently. Green bold denotes those who have recently donated to keep the server carbon neutral.


Special Thanks To:
  • Aaron Holmes
  • Aaron Wheeler
  • Adam Horden
  • Alan Scrimgeour
  • Andre
  • Andrew Haynes
  • Anonymous000
  • asabase
  • Austin Weil
  • barney
  • Barry
  • Bert Hickman
  • Bill Kukowski
  • Blitzorn
  • Brandon Paradelas
  • Bruce Bowling
  • BubeeMike
  • Byong Park
  • Cesiumsponge
  • Chris F.
  • Chris Hooper
  • Corey Worthington
  • Derek Woodroffe
  • Dalus
  • Dan Strother
  • Daniel Davis
  • Daniel Uhrenholt
  • datasheetarchive
  • Dave Billington
  • Dave Marshall
  • David F.
  • Dennis Rogers
  • drelectrix
  • Dr. John Gudenas
  • Dr. Spark
  • E.TexasTesla
  • eastvoltresearch
  • Eirik Taylor
  • Erik Dyakov
  • Erlend^SE
  • Finn Hammer
  • Firebug24k
  • GalliumMan
  • Gary Peterson
  • George Slade
  • GhostNull
  • Gordon Mcknight
  • Graham Armitage
  • Grant
  • GreySoul
  • Henry H
  • IamSmooth
  • In memory of Leo Powning
  • Jacob Cash
  • James Howells
  • James Pawson
  • Jeff Greenfield
  • Jeff Thomas
  • Jesse Frost
  • Jim Mitchell
  • jlr134
  • Joe Mastroianni
  • John Forcina
  • John Oberg
  • John Willcutt
  • Jon Newcomb
  • klugesmith
  • Leslie Wright
  • Lutz Hoffman
  • Mads Barnkob
  • Martin King
  • Mats Karlsson
  • Matt Gibson
  • Matthew Guidry
  • mbd
  • Michael D'Angelo
  • Mikkel
  • mileswaldron
  • mister_rf
  • Neil Foster
  • Nick de Smith
  • Nick Soroka
  • nicklenorp
  • Nik
  • Norman Stanley
  • Patrick Coleman
  • Paul Brodie
  • Paul Jordan
  • Paul Montgomery
  • Ped
  • Peter Krogen
  • Peter Terren
  • PhilGood
  • Richard Feldman
  • Robert Bush
  • Royce Bailey
  • Scott Fusare
  • Scott Newman
  • smiffy
  • Stella
  • Steven Busic
  • Steve Conner
  • Steve Jones
  • Steve Ward
  • Sulaiman
  • Thomas Coyle
  • Thomas A. Wallace
  • Thomas W
  • Timo
  • Torch
  • Ulf Jonsson
  • vasil
  • Vaxian
  • vladi mazzilli
  • wastehl
  • Weston
  • William Kim
  • William N.
  • William Stehl
  • Wesley Venis
The aforementioned have contributed financially to the continuing triumph of 4hv.org. They are deserving of my most heartfelt thanks.
Forums
4hv.org :: Forums :: General Science and Electronics
« Previous topic | Next topic »   

Solids of constant width

Move Thread LAN_403
AndrewM
Wed Dec 07 2011, 06:53AM Print
AndrewM Registered Member #49 Joined: Thu Feb 09 2006, 04:05AM
Location: Bigass Pile of Penguins
Posts: 362
Something a little different, but quick and rewarding should you wish to duplicate it.

A solid of constant width is a solid body that, when trapped between two parallel planes, measures the same width for all orientations. A circle is an obvious example, but more complex arrangements are possible.

Youtube has a video of several such solids showing how cool they are and potentially fun to fool around with on one's desk: Link2

The Reuleaux triangle is a 2d example:
1323239405 49 FT0 Tri

A 3d example can be constructed by revolving the Reuleaux triangle around the axis of symmetry that passes through any vertex, producing an acorn-like shape. The same applies to any polygon with an odd number of vertexes and "Reuleaux" geometry.

Note many other designs satisfy the criteria - sharp corners or even symmetry are not required. Rounded corners are convenient from a manufacturing standpoint.
1323239832 49 FT129889 Tri Rnd

I cut a piece of steel on my CNC mill and then popped it into the lathe to cut such marbles out of scrap wood - this one was done for a 3-sided solid obviously:
1323240222 49 FT129889 Cut

And the finished results:
1323240252 49 FT129889 Done

Should you wish to duplicate, here is a matlab script that a) generates 2d polygons of constant width with any number of sides and any corner radius, and b) outputs Gcode toolpaths to create the cutting tool (or even program your lathe directly, should it be so equipped).

%CWS generator
%Andrew Maurer
clear all
close all

sides=3  %Must be odd integer
rc=0.125 %Corner/cutter RADIUS
r=1      %"Statutory" width of solid

for i=1:sides
   centers(i,:)=[(r/2-rc)*sin(2*pi*i/sides) (r/2-rc)*cos(2*pi*i/sides)]
end
plot(centers(:,1),centers(:,2), '*')
hold on

dtex=norm(centers(1,:)-centers(floor(sides/2)+1,:))

axis square
axis equal
grid on

k=1
for i=1:sides
   for t=0:ceil(r/rc)/2:floor(180/sides)
       theta = 360*i/sides-90/sides+t
       plot(centers(i,1)+rc*sin(theta*2*pi/360), centers(i,2)+rc*cos(theta*2*pi/360),'.r')
       ptcld(k,:)=[centers(i,1)+rc*sin(theta*2*pi/360), centers(i,2)+rc*cos(theta*2*pi/360)]
       k=k+1
   end
   for t=0:floor(180/sides)
       i2=i+ceil(sides/2)
       if i2>sides
           i2=i2-sides;
       end
       theta = 360*i2/sides-90/sides+t
       plot(centers(i2,1)+(dtex+rc)*sin(theta*2*pi/360+pi), centers(i2,2)+(dtex+rc)*cos(theta*2*pi/360+pi),'.g') 
       ptcld(k,:)=[centers(i2,1)+(dtex+rc)*sin(theta*2*pi/360+pi), centers(i2,2)+(dtex+rc)*cos(theta*2*pi/360+pi)]
       k=k+1
   end
end

figure
i=1
while i<size(ptcld,1)
   if ptcld(i,1)<0
       ptcld(i,:)=[]
   else
       i=i+1
   end
   
end

vline=[0 max(ptcld(:,2))+r/2]
for i=2:100
   vline(i,:)=[vline(i-1,1) vline(i-1,2)-r/200]
end
vline2=[0 min(ptcld(:,2))]
for i=2:100
   vline2(i,:)=[vline2(i-1,1) vline2(i-1,2)-r/200]
end

ptcld=[vline;ptcld;vline2]
ptcld=sortrows(ptcld,2)

plot(ptcld(:,1),ptcld(:,2),'b')

axis square
axis equal


k=1
for i=min(ptcld(:,2)):r/200:max(ptcld(:,2))
   y=i;
   [poo mindex]=min(abs(ptcld(:,2)-y));
   x=ptcld(mindex,1);
   d=0;
   while d<rc
       d=99e9;
       for i=1:size(ptcld,1)
          dt=norm([x y]-ptcld(i,:));
          if dt<d
              d=dt;
          end
       end
       if d<rc;
        x=x-r/500;
       end
   end
   hold on
   plot(x,y,'r*');
   %drawnow
   cnc(k,:)=[x y];
   k=k+1;
end
  
fid = fopen('out.iso', 'w');
for i=1:size(cnc,1)
fprintf(fid, 'G01 X%6.6f Y%6.6f F1\n', cnc(i,1), cnc(i,2));
end
fclose(fid);

Here's an example output for a constant-width pentagon w/ "width" = 1, and 0.125 radius corners.
1323240587 49 FT129889 Pent

The toolpath output is very basic - just a single profile pass along the "edge" of a cutting tool as shown. In blue is the profile of the tool to be created. The mill toothpath is shown in red. Note that the tool diameter is assumed to be the same as the diameter of the corners - I used a 1/4" endmill in the photos shown.
1323240628 49 FT129889 Toolpath





Back to top

Moderator(s): Chris Russell, Noelle, Alex, Tesladownunder, Dave Marshall, Dave Billington, Bjørn, Steve Conner, Wolfram, Kizmo, Mads Barnkob

Go to:

Powered by e107 Forum System
 
Legal Information
This site is powered by e107, which is released under the GNU GPL License. All work on this site, except where otherwise noted, is licensed under a Creative Commons Attribution-ShareAlike 2.5 License. By submitting any information to this site, you agree that anything submitted will be so licensed. Please read our Disclaimer and Policies page for information on your rights and responsibilities regarding this site.