Swift - 删除相交线
Swift - Remove intersecting lines
求助!如何删除相交线,这样我就只有外部形状了?
我需要更改什么才能删除相交线?
let width = 300
func circle(withRadius radius: CGFloat) -> UIView {
let path = UIBezierPath(arcCenter: CGPoint(x: width * (1/2), y: width * (1/3)), radius: 80, startAngle: .zero, endAngle: .pi * 2, clockwise: true)
path.append(UIBezierPath(arcCenter: CGPoint(x: width * (1/3), y: width * (2/3)), radius: 80, startAngle: .zero, endAngle: .pi * 2, clockwise: true))
path.append(UIBezierPath(arcCenter: CGPoint(x: width * (2/3), y: width * (2/3)), radius: 80, startAngle: .zero, endAngle: .pi * 2, clockwise: true))
let shapeLayer = CAShapeLayer()
shapeLayer.path = path.cgPath
shapeLayer.fillColor = UIColor.clear.cgColor
shapeLayer.strokeColor = UIColor.black.cgColor
shapeLayer.lineWidth = 3.0
backView.layer.addSublayer(shapeLayer)
return backView
}
一种方法是计算圆切割的 3 个外点的位置。 (图中红色圈出的点)。
然后计算这些点的中心(我们称这个点为中心)。之后,您想计算一个外部点与中心之间的距离(我们将此距离称为半径)。
然后,您可以使用我们之前找到的半径在中心创建一个椭圆。此椭圆必须与背景颜色相同,并且其 zPosition 大于其他 3 个圆圈。
完成后,相交线现在消失了:)
(如果您不知道如何创建椭圆,这是一个可以帮助您的脚本:)
let circle = SKShapeNode(circleOfRadius: radius)
circle.position = center
circle.zPosition = 100 //Need to be greater than the others zPosition
self.addChild(circle)
一般情况下需要解二次方程来计算圆的交点。圆的方程是 (x-x0)^2 + (y-y0)^2 = r^2,其中 (x0,y0) 圆心。但是我发现了一些类似的点来确定宽度和半径的值。
let width: CGFloat = 300
let radius: CGFloat = 80
let point1 = CGPoint(x: width * (1/2), y: width * (1/3))
let point2 = CGPoint(x: width * (1/3), y: width * (2/3))
let point3 = CGPoint(x: width * (2/3), y: width * (2/3))
circle(center: point1, withRadius: radius, startAngle: .pi - .pi/10, endAngle: .pi * 2 + .pi/10)
circle(center: point2, withRadius: radius, startAngle: .pi / 3.5, endAngle: .pi / 3.5 + .pi * 1.11)
circle(center: point3, withRadius: radius, startAngle: .pi * 1.6, endAngle: .pi * 1.72 + .pi)
func circle(center: CGPoint, withRadius radius: CGFloat, startAngle: CGFloat, endAngle: CGFloat) {
let path = UIBezierPath(arcCenter: center, radius: radius, startAngle: startAngle, endAngle: endAngle, clockwise: true)
let shapeLayer = CAShapeLayer()
shapeLayer.path = path.cgPath
shapeLayer.fillColor = UIColor.clear.cgColor
shapeLayer.strokeColor = UIColor.black.cgColor
shapeLayer.lineWidth = 3.0
backView.layer.addSublayer(shapeLayer)
}
求助!如何删除相交线,这样我就只有外部形状了?
我需要更改什么才能删除相交线?
let width = 300
func circle(withRadius radius: CGFloat) -> UIView {
let path = UIBezierPath(arcCenter: CGPoint(x: width * (1/2), y: width * (1/3)), radius: 80, startAngle: .zero, endAngle: .pi * 2, clockwise: true)
path.append(UIBezierPath(arcCenter: CGPoint(x: width * (1/3), y: width * (2/3)), radius: 80, startAngle: .zero, endAngle: .pi * 2, clockwise: true))
path.append(UIBezierPath(arcCenter: CGPoint(x: width * (2/3), y: width * (2/3)), radius: 80, startAngle: .zero, endAngle: .pi * 2, clockwise: true))
let shapeLayer = CAShapeLayer()
shapeLayer.path = path.cgPath
shapeLayer.fillColor = UIColor.clear.cgColor
shapeLayer.strokeColor = UIColor.black.cgColor
shapeLayer.lineWidth = 3.0
backView.layer.addSublayer(shapeLayer)
return backView
}
一种方法是计算圆切割的 3 个外点的位置。 (图中红色圈出的点)。
然后计算这些点的中心(我们称这个点为中心)。之后,您想计算一个外部点与中心之间的距离(我们将此距离称为半径)。 然后,您可以使用我们之前找到的半径在中心创建一个椭圆。此椭圆必须与背景颜色相同,并且其 zPosition 大于其他 3 个圆圈。 完成后,相交线现在消失了:)
(如果您不知道如何创建椭圆,这是一个可以帮助您的脚本:)
let circle = SKShapeNode(circleOfRadius: radius)
circle.position = center
circle.zPosition = 100 //Need to be greater than the others zPosition
self.addChild(circle)
一般情况下需要解二次方程来计算圆的交点。圆的方程是 (x-x0)^2 + (y-y0)^2 = r^2,其中 (x0,y0) 圆心。但是我发现了一些类似的点来确定宽度和半径的值。
let width: CGFloat = 300
let radius: CGFloat = 80
let point1 = CGPoint(x: width * (1/2), y: width * (1/3))
let point2 = CGPoint(x: width * (1/3), y: width * (2/3))
let point3 = CGPoint(x: width * (2/3), y: width * (2/3))
circle(center: point1, withRadius: radius, startAngle: .pi - .pi/10, endAngle: .pi * 2 + .pi/10)
circle(center: point2, withRadius: radius, startAngle: .pi / 3.5, endAngle: .pi / 3.5 + .pi * 1.11)
circle(center: point3, withRadius: radius, startAngle: .pi * 1.6, endAngle: .pi * 1.72 + .pi)
func circle(center: CGPoint, withRadius radius: CGFloat, startAngle: CGFloat, endAngle: CGFloat) {
let path = UIBezierPath(arcCenter: center, radius: radius, startAngle: startAngle, endAngle: endAngle, clockwise: true)
let shapeLayer = CAShapeLayer()
shapeLayer.path = path.cgPath
shapeLayer.fillColor = UIColor.clear.cgColor
shapeLayer.strokeColor = UIColor.black.cgColor
shapeLayer.lineWidth = 3.0
backView.layer.addSublayer(shapeLayer)
}