`zykloid`

which allows to scale and position
a cycloid by the radius A of the fixed circle and its midpoint
While `zykloid`

provides the basic functionality for
calculating cycloids, this functions allows to re-size a cycloid
by freely setting the radius on the fixed circle. In addition,
the cycloid can be re-positioned by locating the fix circle's
midpoint. See Figures 1 and 2 and `zykloid`

for the
geometrical principles of cycloids.

1 2 | ```
zykloid.scaleA(A, a, lambda, hypo = TRUE, Cx = 0, Cy = 0,
RadiusA = 1, steps = 360, start = pi/2)
``` |

`A` |
The Radius of the fixed circle before re-sizing. Must be an integer
Number > 0. Together with |

`a` |
The radius of the moving circle before re-sizing. Must be an
integer Number > 0. Together with |

`lambda` |
The distance of the tracepoint from the moving circle's (c |

`hypo` |
logical. If TRUE, the resulting figure is a hypocycloid ( |

`Cx` |
x-coordinate of the fixed circle's midpoint. Default is 0. |

`Cy` |
y-coordinate of the fixed circle's midpoint. Default is 0. |

`RadiusA` |
The actual radius of the fixed circle. Default is 1. |

`steps` |
positive integer. The number of steps per circuit of the moving
circle ( |

`start` |
Start angle (radians) of the moving circle's ( |

A dataframe with the columns *x* and *y*. Each row represents a
tracepoint position. The positions are ordered along the trace
with the last and the first point being identical in order to
warrant a closed figure when plotting the data.

Peter Biber

`zykloid`

,
`zykloid.scaleAa`

, `zykloid.scaleP`

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | ```
# Same hypotrochoid scaled to different radii of the fix circle
cycl1 <- zykloid.scaleA(A = 7, a = 3, lambda = 2/3, RadiusA = 1.3)
cycl2 <- zykloid.scaleA(A = 7, a = 3, lambda = 2/3, RadiusA = 1.0)
cycl3 <- zykloid.scaleA(A = 7, a = 3, lambda = 2/3, RadiusA = 0.7)
plot (y ~ x, data = cycl1, asp = 1, col = "red", type = "l",
main = "A = 7, a = 3, lambda = 2/3")
lines(y ~ x, data = cycl2, asp = 1, col = "green")
lines(y ~ x, data = cycl3, asp = 1, col = "blue")
legend("topleft", c("RadiusA = 1.3", "RadiusA = 1.0", "RadiusA = 0.7"),
lty = rep("solid", 3), col = c("red", "green", "blue"), bty = "n")
# In this example, RadiusA depends on the cosine of the x-coordinate
# of the fixed circle's centre
op <- par(mar = c(0,0,0,0), bg = "black")
ctrx <- seq(-2*pi, 2*pi, pi/10)
ccol <- rainbow(length(ctrx))
plot.new()
plot.window(asp = 1, xlim = c(-8, 8), ylim = c(-0.5, 0.5))
for(i in c(1:length(ctrx))) {
zzz <- zykloid.scaleA(A = 9, a = 7, hypo = TRUE, Cx = ctrx[i],
Cy = -ctrx[i], lambda = 0.9,
RadiusA = 1.5 + cos(ctrx[i]), start = -pi/4)
lines(y ~ x, data = zzz, col = ccol[i])
} # for i
par(op)
# Geometric degression of RadiusA makes a nice star
op <- par(mar = c(0,0,0,0), bg = "black")
plot.new()
plot.window(asp = 1, xlim = c(-10, 10), ylim = c(-10, 10))
rad <- 10
n <- 60
ccol <- heat.colors(n)
for(i in c(1:n)) {
if (i/2 != floor(i/2)) { sstart = pi/2 }
else { sstart = pi/4 }
zzz <- zykloid.scaleA(A = 4, a = 3, RadiusA = rad, lambda = 1,
start = sstart)
lines(y ~ x, data = zzz, col = ccol[i])
rad <- rad * 0.9
} # for i
par(op)
# A windmill
op <- par(mar = c(0,0,0,0), bg = "black")
plot.new()
plot.window(asp = 1, xlim = c(-1.4, 1.4), ylim = c(-1.4, 1.4))
rrad <- sqrt(seq(0.1, 2, 0.1))
n <- length(rrad)
ccol <- rainbow(n, start = 0, end = 0.3)
for(i in c(1:n)) {
zzz <- zykloid.scaleA(A = 7, a = 3, RadiusA = rrad[i],
hypo = TRUE, lambda = 1.1,
start = pi/2 - (1*pi/7 - (i - 1) * 2*pi/(7 * n)))
lines(y ~ x, data = zzz, col = ccol[n + 1 - i])
} # for i
par(op)
# Advanced Example: A series of cycloids with their centres
# located on a logarithmic spiral
op <- par(mar = c(0,0,0,0), bg = "black")
plot.new()
plot.window(asp = 1, xlim = c(-50, 50), ylim = c(-50, 50))
a <- 1/32 # spiral's scaling constant
alpha <- pi/20 # spiral's slope angle
sphi <- seq(0, 18 * pi, pi/25) # series of angles for cycloid centres
rad <- a * exp(tan(alpha)*sphi) # corresponding spiral radii
spx <- rad * cos(sphi) # corresponding x-coordinates
spy <- rad *sin(sphi) # corresponding y-coordinates
n <- length(sphi)
ccol <- rainbow(n, start = 2/3, end = 1/2)
for (i in c(1:n)) {
czc <- zykloid.scaleA(A = 3, a = 1, lambda = 1.5,
Cx = spx[i], Cy = spy[i],
RadiusA = rad[i]/2.5, # cycloid radii depends on spiral radii
start = pi + sphi[i]) # angle cycloid towards spiral centre
lines(y ~ x, data = czc, col = ccol[i])
} # for i
par(op)
``` |

Questions? Problems? Suggestions? Tweet to @rdrrHQ or email at ian@mutexlabs.com.

All documentation is copyright its authors; we didn't write any of that.