Найти точку на линии, находящуюся на заданной дистанции от её начала - C#

Узнай цену своей работы

Формулировка задачи:

Задача такая. Есть линия с x0,y0; x1,y1. Расстояние между точками (x0,y0) и (x1,y1) > некой заданной дистанции. Нужно найти ближайшую точку к (x0,y0), лежащую на этой линии и находящуюся на заданной дистанции. Как выразить уравнение линии, понятно. Нашли k и b. Дальше что? Изменяемые координаты у нас 2 - х и y. Искать каждую точку перебором, инкрементируя x или y? Прошу совета. Голова уже не варит.

Решение задачи: «Найти точку на линии, находящуюся на заданной дистанции от её начала»

textual
Листинг программы
  1. using System;
  2. using System.Linq;
  3.  
  4. namespace ConsoleApplication202
  5. {
  6.     class Program
  7.     {
  8.         static void Main(string[] args)
  9.         {
  10.             var x0 = 10;
  11.             var y0 = 10;
  12.             var x1 = 100;
  13.             var y1 = 100;
  14.             var expectedDistance = 23;
  15.  
  16.             //находим длину исходного отрезка
  17.             var dx = x1 - x0;
  18.             var dy = y1 - y0;
  19.             var l = Math.Sqrt(dx * dx + dy * dy);
  20.             //находим направляющий вектор
  21.             var dirX = dx / l;
  22.             var dirY = dy / l;
  23.             //умножаем направляющий вектор на необх длину
  24.             dirX *= expectedDistance;
  25.             dirY *= expectedDistance;
  26.             //находим точку
  27.             var resX = dirX + x0;
  28.             var resY = dirY + y0;
  29.  
  30.             Console.WriteLine("{0:0.0} {1:0.0}", resX, resY);
  31.  
  32.             Console.ReadLine();
  33.         }
  34.     }
  35. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы