Уроки · 19
Расстояние
В уроке «Смещение» мы вычитали координату из координаты,
чтобы узнать, насколько сдвинуться. Сейчас пойдём чуть дальше:
разница по x и разница по y вместе превращаются в одно число —
расстояние между двумя точками.
Замени содержимое src/main.rs на это:
use macroquad::prelude::*;
#[macroquad::main("Расстояние")]async fn main() { loop { clear_background(BLACK);
// Центр экрана. let center_x = screen_width() / 2.0; let center_y = screen_height() / 2.0;
// Координаты курсора. let (mouse_x, mouse_y) = mouse_position();
// Разница по x между курсором и центром. let dx = mouse_x - center_x; // Разница по y между курсором и центром. let dy = mouse_y - center_y; // Квадрат расстояния — сумма квадратов разниц по x и по y. let squared_distance = dx * dx + dy * dy; // Само расстояние — квадратный корень из squared_distance. let distance = squared_distance.sqrt();
// draw_circle_lines — то же самое, что draw_circle, только // рисует контур, а не сплошную заливку. draw_circle_lines(center_x, center_y, distance, 3.0, YELLOW);
// Белая точка — курсор, чтобы видно было, что контур касается // его ровно в этой точке. draw_circle(mouse_x, mouse_y, 8.0, WHITE);
next_frame().await; }}Запусти как обычно:
cargo runДвигай мышь — контур растёт и сжимается вслед за курсором, но всегда проходит ровно через него. Попробуй прямо здесь:
Что здесь происходит
Заголовок раздела «Что здесь происходит»dxиdy— разница по каждой оси между курсором и центром, тем же способом, что и в “Смещении”.dx * dxиdy * dy— возведение в квадрат. Оно заодно убирает минус: неважно, слева мышь от центра или справа, разница “в квадрате” всегда получается положительной..sqrt()— квадратный корень, действие, обратное возведению в квадрат. Складываем оба квадрата и достаём из суммы корень — и получаем настоящее расстояние в пикселях. У этого способа считать расстояние есть своё название — теорема Пифагора; откуда она берётся и почему вообще верна — в дополнительном уроке «Теорема Пифагора».- Раз
distance— это и есть расстояние от центра до курсора, его можно напрямую использовать как радиус: контур круга с таким радиусом обязательно пройдёт через точку, из которой это расстояние считали.