I have circles and based on circle intersect i need to find center of intersect and display pin. I wrote the code, but it works not as i expected, something works wrong, but i cant understand where is incorrect part.
This is how works with 3 circles

Another example with 3 circles
Example with 4 circles
My code:
let c1 = createCircleArea(center: CLLocationCoordinate2D(latitude: lat1, longitude: lon1), radius: distance1)
let c2 = createCircleArea(center: CLLocationCoordinate2D(latitude: lat2, longitude: lon2), radius: distance2)
let c3 = createCircleArea(center: CLLocationCoordinate2D(latitude: lat3, longitude: lon3), radius: distance3)
Generation location based on intersect
let loc = getIntersectionPoint(for: [c1, c2, c3])
The main method which determinate location
func getIntersectionPoint(for circles: [MKCircle]) -> CLLocationCoordinate2D? {
var intersectionPoints = [CLLocationCoordinate2D]()
for i in 0..<circles.count {
for j in (i+1)..<circles.count {
let circle1 = circles[i]
let circle2 = circles[j]
let center1 = circle1.coordinate
let center2 = circle2.coordinate
let radius1 = circle1.radius
let radius2 = circle2.radius
let distance = center1.distance(to: center2)
if distance < radius1 + radius2 {
// Circles intersect, find intersection points
let a = (radius1*radius1 - radius2*radius2 + distance*distance)/(2*distance)
let h = sqrt(radius1*radius1 - a*a)
let p2x = center1.longitude + a*(center2.longitude - center1.longitude)/distance
let p2y = center1.latitude + a*(center2.latitude - center1.latitude)/distance
let intersectionPoint1 = CLLocationCoordinate2D(latitude: p2y + h*(center2.longitude - center1.longitude)/distance,
longitude: p2x - h*(center2.latitude - center1.latitude)/distance)
let intersectionPoint2 = CLLocationCoordinate2D(latitude: p2y - h*(center2.longitude - center1.longitude)/distance,
longitude: p2x + h*(center2.latitude - center1.latitude)/distance)
intersectionPoints.append(intersectionPoint1)
intersectionPoints.append(intersectionPoint2)
}
}
}
if intersectionPoints.count == 0 {
return nil // No intersection points found
} else if intersectionPoints.count == 1 {
return intersectionPoints[0] // Only one intersection point found
} else {
// Calculate centroid of all intersection points
var centroid = CLLocationCoordinate2D(latitude: 0, longitude: 0)
for point in intersectionPoints {
centroid.latitude += point.latitude
centroid.longitude += point.longitude
}
centroid.latitude /= Double(intersectionPoints.count)
centroid.longitude /= Double(intersectionPoints.count)
return centroid
}
}

