【发布时间】:2014-10-08 11:17:18
【问题描述】:
我正在尝试创建一个圆圈,阿拉:
圆有一个给定的半径,circleRadius。环的最大半径为maxRingRadius。圆的数量可以是任意整数circles,需要与圆的实际半径ringRadius一起计算。当圆的中心距圆环中心 ringRadius 个单位时,圆应该完全接触,如图所示。
给定一个circleRadius 和一个maxRingRadius,如何找到最接近(或下一个最小)的ringRadius,它适合整数circles,然后定位这些圆圈?
static Vector3[] RingOfCircles(float maxRingRadius, float circleRadius) {
//int circles = ...; // calculate this?
//float ringRadius = ...; // calculate this?
//Edit: Solution. These three lines are adapted from InBetween's GetNextSmallerRingRadius function but Unity3d-ized and without validation
int circles = Mathf.RoundToInt(Mathf.PI / Mathf.Asin(circleRadius / maxRingRadius));
float centralAngle = 2 * Mathf.PI / (numberOfCircles - 1);
float ringRadius = circleRadius / Mathf.Sin(centralAngle / 2);
// create ring of center points
float radsPerCircle = (Mathf.PI * 2) / circles;
Vector3[] centerPoints = new Vector3[circles];
for (int i=0; i < circles; i++) {
float angle = i * radsPerCircle;
centerPoints[i] = new Vector3(
Mathf.Sin(angle) * ringRadius,
Mathf.Cos(angle) * ringRadius,
0);
}
return centerPoints;
}
`
注意:就我的目的而言,maxRingRadius 也可以是 minRingRadius 或 approximateRingRadius。但是ringRadius 应该定义下一个最近的“环”,它可以容纳整数个圆圈。
已解决: 解决方案的视觉确认
【问题讨论】:
标签: c# unity3d 2d trigonometry unity3d-2dtools