计算 n 边正多边形的顶点
Calculate vertices for n sided regular polygon
我已经尝试遵循这个answer
它可以很好地创建多边形,但是我可以看到它没有到达包含矩形的边缘。
下面的 gif 显示了我的意思。特别是对于 5 边形,很明显它不是 "span" 我希望它做的矩形
这是我用来创建顶点的代码
func verticesForEdges(_edges: Int) -> [CGPoint] {
let offset = 1.0
var vertices: [CGPoint] = []
for i in 0..._edges {
let angle = M_PI + 2.0 * M_PI * Double(i) / Double(edges)
var x = (frame.width / 2.0) * CGFloat(sin(angle)) + (bounds.width / 2.0)
var y = (frame.height / 2.0) * CGFloat(cos(angle)) + (bounds.height / 2.0)
vertices.append(CGPoint(x: x, y: y))
}
return vertices
}
这是使用顶点的代码
override func layoutSublayers() {
super.layoutSublayers()
var polygonPath = UIBezierPath()
let vertices = verticesForEdges(edges)
polygonPath.moveToPoint(vertices[0])
for v in vertices {
polygonPath.addLineToPoint(v)
}
polygonPath.closePath()
self.path = polygonPath.CGPath
}
那么问题来了。如何让多边形填满矩形
更新:
长方形不一定是正方形。它的高度可以与其宽度不同。从评论看来,我正在将多边形拟合成一个圆,但我的目的是将它拟合成一个矩形。
如果第一个(i=0)顶点固定在矩形顶部边缘的中间,我们可以计算边界矩形的最小宽度和高度:
最右边的顶点索引
ir = (N + 2) / 4 // N/4, rounded to the closest integer, not applicable to triangle
MinWidth = 2 * R * Sin(ir * 2 * Pi / N)
底部顶点索引
ib = (N + 1) / 2 // N/2, rounded to the closest integer
MinHeight = R * (1 + Abs(Cos(ib * 2 * Pi / N)))
因此对于给定的矩形尺寸,我们可以计算 R 参数以正确地内切多边形
我已经尝试遵循这个answer
它可以很好地创建多边形,但是我可以看到它没有到达包含矩形的边缘。
下面的 gif 显示了我的意思。特别是对于 5 边形,很明显它不是 "span" 我希望它做的矩形
这是我用来创建顶点的代码
func verticesForEdges(_edges: Int) -> [CGPoint] {
let offset = 1.0
var vertices: [CGPoint] = []
for i in 0..._edges {
let angle = M_PI + 2.0 * M_PI * Double(i) / Double(edges)
var x = (frame.width / 2.0) * CGFloat(sin(angle)) + (bounds.width / 2.0)
var y = (frame.height / 2.0) * CGFloat(cos(angle)) + (bounds.height / 2.0)
vertices.append(CGPoint(x: x, y: y))
}
return vertices
}
这是使用顶点的代码
override func layoutSublayers() {
super.layoutSublayers()
var polygonPath = UIBezierPath()
let vertices = verticesForEdges(edges)
polygonPath.moveToPoint(vertices[0])
for v in vertices {
polygonPath.addLineToPoint(v)
}
polygonPath.closePath()
self.path = polygonPath.CGPath
}
那么问题来了。如何让多边形填满矩形
更新:
长方形不一定是正方形。它的高度可以与其宽度不同。从评论看来,我正在将多边形拟合成一个圆,但我的目的是将它拟合成一个矩形。
如果第一个(i=0)顶点固定在矩形顶部边缘的中间,我们可以计算边界矩形的最小宽度和高度:
最右边的顶点索引
ir = (N + 2) / 4 // N/4, rounded to the closest integer, not applicable to triangle
MinWidth = 2 * R * Sin(ir * 2 * Pi / N)
底部顶点索引
ib = (N + 1) / 2 // N/2, rounded to the closest integer
MinHeight = R * (1 + Abs(Cos(ib * 2 * Pi / N)))
因此对于给定的矩形尺寸,我们可以计算 R 参数以正确地内切多边形