Массивы для хранения координат
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. Задание для практики
Реализуйте функции:
- Длина вектора (расстояние от начала координат)
- Расстояние между двумя точками
- Середина отрезка
((x1+x2)/2, (y1+y2)/2, (z1+z2)/2) - Сумма векторов
(x1+x2, y1+y2, z1+z2)
Формула для проверки (2D):
Точка (3, 4) → расстояние = √(3² + 4²) = √25 = 5.0