Raphaelでは任意の形状を円に変形したいので、過度の歪みはないので、元のパス内のノードを数え、同じ数のノードで新しいパスを作成します。ポリゴンをRaphaelのサークルに変換するにはどうすればよいですか?
これまでのところ、新しいパスを同じ数のノードを持つポリゴンに配置することができましたが、円を達成するためにキュービックベジェポイントを調整したいときに私の計算が失敗します。私は接線を計算すべきであることは分かっていますが、どのように進むべきかはわかりません。ここに私のコードは次のとおりです。
var path, paper, circle, radius;
radius = 150;
paper = Raphael("canvas", radius*4, radius*4);
path = drawCircle(6) //can be any number
function drawCircle(nodes){
newPath = [];
for(x=0; x<nodes; x++) {
deg = (x/nodes)*360;
if(x==0) {
newPath.push("M " + Math.sin(deg*Math.PI/180)*radius + " " + Math.cos(deg*Math.PI/180)*radius);
}
else {
newPath.push(
"C " + Math.sin(deg*Math.PI/180)*radius
+ " " + Math.cos(deg*Math.PI/180)*radius
+ " " + Math.sin(deg*Math.PI/180)*radius
+ " " + Math.cos(deg*Math.PI/180)*radius
+ " " + Math.sin(deg*Math.PI/180)*radius
+ " " + Math.cos(deg*Math.PI/180)*radius
)
}
}
newPath.push("Z")
console.log(newPath)
paper.path(newPath).attr({"fill": "#000"}).translate(200, 200)
}
ここではそれを試してみるjsfiddleです: http://jsfiddle.net/zeYtT/
完璧!どうもありがとうございます。私を困惑させたのは、アニメートされているときに形が反転したときに、Math.cosをxに割り当てていることに気付きました。そして、yに代入しています。どちらが正しいのか分かりませんが、同じように行動するようです。 – Duopixel