Массивы для хранения координат

1. Применение массивов: координаты точек

Задача из геометрии

Декартова система координат:

  • 2D: ось X, ось Y
  • 3D: ось X, ось Y, ось Z

Точка в пространстве = набор координат → массив чисел.


2. Хранение координат в массиве

Примеры по размерности

Пространство Массив Пример
2D (плоскость) [2]float64 {3.5, 7.2}
3D (объём) [3]float64 {10.5, 20.3, 15.7}
4D (пространство-время) [4]float64 {x, y, z, t}

Код

point := [3]float64{10.5, 20.3, 15.7}

fmt.Printf("X: %.1f\n", point[0])  // 10.5
fmt.Printf("Y: %.1f\n", point[1])  // 20.3
fmt.Printf("Z: %.1f\n", point[2])  // 15.7

3. Расстояние от начала координат

Формула (теорема Пифагора для 3D)

[ d = \sqrt{x^2 + y^2 + z^2} ]

Для точки (10.5, 20.3, 15.7): [ d = \sqrt{10.5^2 + 20.3^2 + 15.7^2} ]


Реализация на Go

import "math"

point := [3]float64{10.5, 20.3, 15.7}

// Вычисляем расстояние
distance := math.Sqrt(
    point[0]*point[0] +  // x²
    point[1]*point[1] +  // y²
    point[2]*point[2],   // z²
)

fmt.Printf("Расстояние до начала координат: %.2f\n", distance)

Вывод:

Расстояние до начала координат: 27.24

4. Полный код с формулой

package main

import (
    "fmt"
    "math"
)

func main() {
    fmt.Println("--- Координаты точки в 3D ---")
    
    point := [3]float64{10.5, 20.3, 15.7}
    
    fmt.Printf("Точка: %v\n", point)
    fmt.Printf("X: %.1f, Y: %.1f, Z: %.1f\n", 
        point[0], point[1], point[2])
    
    // Расстояние от начала координат
    distance := math.Sqrt(
        math.Pow(point[0], 2) +  // Альтернативно
        math.Pow(point[1], 2) +
        math.Pow(point[2], 2),
    )
    
    fmt.Printf("Расстояние до (0, 0, 0): %.2f\n", distance)
}

5. Расстояние между двумя точками

Формула

[ d = \sqrt{(x_2-x_1)^2 + (y_2-y_1)^2 + (z_2-z_1)^2} ]

Код

point1 := [3]float64{10.5, 20.3, 15.7}
point2 := [3]float64{5.0, 10.0, 8.0}

distance := math.Sqrt(
    math.Pow(point2[0]-point1[0], 2) +
    math.Pow(point2[1]-point1[1], 2) +
    math.Pow(point2[2]-point1[2], 2),
)

fmt.Printf("Расстояние между точками: %.2f\n", distance)

6. Универсальная функция (обобщение)

// Для любого количества измерений
func distance(point []float64) float64 {
    sum := 0.0
    for _, coord := range point {
        sum += coord * coord
    }
    return math.Sqrt(sum)
}

// Использование
point2D := []float64{3.0, 4.0}
fmt.Printf("2D: %.2f\n", distance(point2D))  // 5.00

point3D := []float64{10.5, 20.3, 15.7}
fmt.Printf("3D: %.2f\n", distance(point3D))  // 27.24

7. Практические применения

Задача Структура данных
Точка на плане [2]float64{x, y}
Точка в 3D-модели [3]float64{x, y, z}
RGB-цвет [3]int{255, 128, 0}
Вектор скорости [3]float64{vx, vy, vz}
Размеры коробки [3]float64{длина, ширина, высота}

8. Ключевые выводы

Массив = естественный способ хранения координат
Размерность массива = размерность пространства
Формулы геометрии легко переводятся в код
Практика программирования = умение выбирать правильную структуру данных

Правило: Если данные — это набор однородных значений → массив.


9. Задание для практики

Реализуйте функции:

  1. Длина вектора (расстояние от начала координат)
  2. Расстояние между двумя точками
  3. Середина отрезка ((x1+x2)/2, (y1+y2)/2, (z1+z2)/2)
  4. Сумма векторов (x1+x2, y1+y2, z1+z2)

Формула для проверки (2D):

Точка (3, 4) → расстояние = √(3² + 4²) = √25 = 5.0