---
# System prepended metadata

title: 2020-04-06 | IA | CGPoint Array to Double Array
tags: [swift, ia, gobelins]

---

# 2020-04-06 | IA | CGPoint Array to Double Array

###### tags: `swift` `ia` `gobelins`

## Import
```
import Foundation
```

## Fonctions

### GetCoord
```swift
func getCoord(pos:[CGPoint]) -> [Double] {
    var values = [Double]()
    
    var coordX = [Double]()
    var coordY = [Double]()

    for item in pos {
        coordX.append(Double(item.x))
        coordY.append(Double(item.x))
    }

    values = coordX + coordY

    return values
}

```

### GetCoordCouples
```swift
func getCoordCouples(pos:[CGPoint]) -> [Double] {
    var values = [Double]()
    for item in pos {
        values.append(Double(item.x))
        values.append(Double(item.y))
    }

    return values
}
```

### FormatArray
```swift
func formatArray(nbPos:Int, posArray:[Double]) -> [Double]{
    var finalArray = [Double]()

    for i in 0..<nbPos{
        if i < posArray.count {
            finalArray.append(posArray[i])
        }
        else{
            finalArray.append(0.0)
        }
    }

    return finalArray
}
```

### NormalizeArray
```swift
func normalizeArray(values:[Double]) -> [Double] {
    let min = values.min()!
    let max = values.max()!

    var finalArray = [Double]()

    if min == max {
        for item in values {
            finalArray.append(1.0 / Double(values.count))
        }
    }else{
        for i in 0..<values.count{
            finalArray.append((values[i] - min)/(max - min))
        }
    }

    return finalArray
}
```

### ConvertAndNormalize
```swift
enum CoordOrganization {
    case pair,seq
}

func convertAndNormalize(coords:[CGPoint], org:CoordOrganization, n:Int) -> [Double] {

    var values = [Double]()

    switch org {
        case .pair:
            values = getCGPointToDoubleCouple(pos:coords)
        case .seq:
            values =  getCGPointToDouble(pos:coords)
        default:
            fatalError("Unsupported")
    }
    
    values = formatArray(nbPos:n,posArray:values)
    values = normalizeArray(values:values)

    return values
}
```

## Call
```
var pos = [CGPoint(x: 0, y: 1),CGPoint(x: 2, y: 5),CGPoint(x: 4, y: 1),CGPoint(x: 1, y: 0),CGPoint(x: 4, y: 9),CGPoint(x: 0, y: 1),CGPoint(x: 2, y: 5),CGPoint(x: 4, y: 1),CGPoint(x: 1, y: 0),CGPoint(x: 4, y: 9),CGPoint(x: 0, y: 1),CGPoint(x: 2, y: 5),CGPoint(x: 4, y: 1),CGPoint(x: 1, y: 0),CGPoint(x: 4, y: 9),CGPoint(x: 0, y: 1),CGPoint(x: 2, y: 5),CGPoint(x: 4, y: 1),CGPoint(x: 1, y: 0),CGPoint(x: 4, y: 9)]

print("Values avec les couples de coordonnées, tableau de taille 5 :")
print(convertAndNormalize(coords:pos,org:CoordOrganization.pair,n:5))

print("Values avec les x puis les y, tableau de taille 22 :")
print(convertAndNormalize(coords:pos,org:CoordOrganization.seq,n:22))
```

## Result
```
Values avec les couples de coordonnées, tableau de taille 5 :
[0.0, 0.2, 0.4, 1.0, 0.8]
Values avec les x puis les y, tableau de taille 22 :
[0.0, 0.5, 1.0, 0.25, 1.0, 0.0, 0.5, 1.0, 0.25, 1.0, 0.0, 0.5, 1.0, 0.25, 1.0, 0.0, 0.5, 1.0, 0.25, 1.0, 0.0, 0.5]
```

