oncone <- function(p,q,α=pi/6){ # (p,q) 展開図上の座標、頂点の角度=2α
PQ=sqrt(p^2+q^2)
β=pi*sin(α)
θ=atan(p/q)
rdash=PQ*β/pi
γ=PQ*θ/rdash
x=rdash*sin(γ)
y=PQ/(tan(α)*sqrt(1+tan(α)^-2))
z=rdash*(1-cos(γ))
c(x=x,y=y,z=z)
}
onCone=Vectorize(oncone)
onCone(1:3,4:6)
library(rgl)
p0=0 ; q0=0.5 ; r=0.3
theta=seq(-pi,pi,0.01)
p=r*cos(theta)+p0
q=r*sin(theta)+q0
points(p,q,asp=1,col=2)
re=onCone(p,q)
x=re['x',] ;y=re['y',];z=re['z',]
rgl::plot3d(x,y,z,col='brown')

library(scatterplot3d)
scatterplot3d(x, y, z, highlight.3d=TRUE, col.axis="blue",
col.grid="lightblue", main="メガホンに輪ゴム", pch=20)