Javascript 内接在另一个圆上的相切圆环

Javascript 内接在另一个圆上的相切圆环,javascript,trigonometry,Javascript,Trigonometry,我的问题是基于。 这篇文章的代码太棒了 它创建一个与基圆相切的卫星圆环(在基圆外) 此部分计算圆外部的半径: var angle = Math.PI / n; var s = Math.sin(angle); var r = baseRadius * s / (1-s); 如果我希望圆环与基圆相切,如何计算圆的半径? 非常感谢您的帮助。通过Sine和Cosine和PI修改您的子圈 您可以将其用作基线: //类 var Coord=(函数(){ 函数坐标(x,y){ 这个.x=x; 这个。y=

我的问题是基于。 这篇文章的代码太棒了

它创建一个与基圆相切的卫星圆环(在基圆外)

此部分计算圆外部的半径:

var angle = Math.PI / n;
var s = Math.sin(angle);
var r = baseRadius * s / (1-s);
如果我希望圆环与基圆相切,如何计算圆的半径?


非常感谢您的帮助。

通过
Sine
Cosine
PI
修改您的子圈

您可以将其用作基线:

//类
var Coord=(函数(){
函数坐标(x,y){
这个.x=x;
这个。y=y;
}
返回坐标;
}());
var Circle=(函数(){
功能圆(origo,半径){
this.origo=origo;
这个半径=半径;
}
Circle.prototype.percentry=函数(){
返回this.radius*2*Math.PI;
};
返回圈;
}());
//功能
函数(主、计数){
如果(计数===无效0){
计数=4;
}
var结果=[];
对于(var索引=0;索引<计数;索引++){
var cos=数学cos(((数学PI*2)/计数)*指数);
var sin=数学sin(((数学PI*2)/计数)*指数);
变量圆=新圆(新坐标(master.origo.x+(master.radius*cos)-(master.radius/(count/2))*cos,master.origo.y+(master.radius*sin)-(master.radius/(count/2))*sin,master.radius/(count/2));
结果:推(圈);
}
返回结果;
}
//>>测试(500){
i=4;
}
i=i*2;
setTimeout(函数(){
抽签(i);
}, 1000);
}
抽签(8)
/**
*坐标
*/
var Coord=(函数(){
函数坐标(x,y){
这个.x=x;
这个。y=y;
}
返回坐标;
}());
/**
*圈
*/
var Circle=(函数(){
功能圆(origo,半径){
this.origo=origo;
这个半径=半径;
}
Circle.radiusfrompercentage=函数(周长){
返回周长/Math.PI/2;
};
圆周=函数(半径){
返回2*Math.PI*半径;
};
Circle.prototype.percentry=函数(){
返回圆周长(此半径);
};
返回圈;
}());
//功能
功能距离(x1,y1,x2,y2){
返回Math.sqrt(Math.pow(x1-x2,2)+Math.pow(y1-y2,2));
}
函数getRadian(计数、索引){
返回((Math.PI*2)/计数)*索引;
}
函数圆自圆周(主、计数){
var循环=[];
var masterpercentage=master.percentage();
var innerRadius=圆。半径自圆周(主圆周);
//var InnerPercentage=圆周长(内半径);
循环变异系数=0;
var弧度=getRadian(计数,1);
var maxCalc=1000;
while(maxCalc--){
var dist=距离(数学cos(0)*内半径+主半径origo.x,数学sin(0)*内半径+主半径origo.y,数学cos(弧度)*内半径+主半径origo.x,数学sin(弧度)*内半径+主半径origo.y);
if(数学绝对值(dist/2-圈)<0.5){
打破
}
圆环=dist/2;
innerRadius=主半径-圆环半径;
}
对于(var索引=0;索引<计数;索引++){
var弧度=getRadian(计数、索引);
var cos=数学cos(弧度);
var sin=数学sin(弧度);
变量c=新圆(新坐标(cos*innerRadius+master.origo.x,sin*innerRadius+master.origo.y),圆环);
圆。推(c);
}
返回圈;
}
//>>测试(32){
尺寸=2;
}
图纸(尺寸);
}, 1000 / 4);
}

抽签(1)