Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.10.2017, 09:28   #1
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию нарисовать линию от точки А по направлению к точке Б в пределах радиуса

Здравствуйте, товарищи!
Есть код, который рисует линию по кругу:
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  inc(n,2);
  if n>=360 then
  n := 0;
  Canvas.FillRect(ClientRect);
  DrawAngle(Width div 2, Height div 2, 100, n);
end;

procedure TForm1.DrawAngle(x,y,radius, angle : Integer);
begin
  Canvas.MoveTo(x,y);
  Canvas.Ellipse(x-radius,y-radius,x+radius,y+radius);
  Canvas.LineTo(Round(x + Cos(angle/180*pi)*radius),
                          Round(y + Sin(angle/180*pi)*radius));
end;
Как нарисовать эту линию по направлению к заданной точке?
BLACK_RAIN вне форума Ответить с цитированием
Старый 31.10.2017, 09:52   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Центр окружности, горизонтальная ось через центр и та та точка треугольник образуют. Вычисли угол и воспользуйся своей же DrawAngle. Я бы angle сразу в радианах передавал ))

ps

тангенс того угла (y1-y0)/(x1-x0)
x0,y0 - центр окружности
x1,y1 - заданная точка
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 31.10.2017 в 09:59.
Аватар вне форума Ответить с цитированием
Старый 31.10.2017, 09:59   #3
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Центр окружности, горизонтальная ось через центр и та та точка треугольник образуют. Вычисли угол
Я знаю что надо угол вычислить, но у меня с математикой не лады, по-этому и спрашиваю.
BLACK_RAIN вне форума Ответить с цитированием
Старый 31.10.2017, 10:01   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
у меня с математикой не лады
Не, ну прямоугольный треугольник это даже не математика, а арифметика 7-8 класса ))
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 31.10.2017, 10:13   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от BLACK_RAIN Посмотреть сообщение
Как нарисовать эту линию по направлению к заданной точке?
а что значит - к "заданной точке" ?
Точка чем задана?

если углом, то код уже есть.
если координатами, то Canvas.Line() или LineTo() решают эту задачу вообще без всяких вычислений.

Или я что-то не понял?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 31.10.2017, 10:16   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

ТС же видимо нужно что бы за пределы окружности луч не выходил
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 31.10.2017, 10:22   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
ТС же видимо нужно что бы за пределы окружности луч не выходил
ага. спасибо. ну так хоть понятно стало, что же нужно.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 31.10.2017, 10:22   #8
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Точка чем задана?
позиция курсора мыши, например
Цитата:
Сообщение от Аватар Посмотреть сообщение
ТС же видимо нужно что бы за пределы окружности луч не выходил
именно так.
или наоборот - чтобы уходил дальше заданной точки.
у меня единственная проблема - как вычислить угол до этой точки
BLACK_RAIN вне форума Ответить с цитированием
Старый 31.10.2017, 10:30   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
DrawAngle(x,y,r,ArcTan((y0-y)/(x0-x)));
ну только последний аргумент в радианах и Real. Да, и x<>x0, иначе облом ))
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 31.10.2017, 10:51   #10
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
последний аргумент
а куда его, я, естественно, не понял.
x0,y0 - искомая точка?
BLACK_RAIN вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определить взаимное расположение точки с координатами (x_0,y_0) и окружности радиуса R с центром в точке (x_1,y_1). С# :) OlgaRostov C# (си шарп) 3 24.09.2015 20:26
Нарисовать линию на картинке spirit-ua PHP 13 02.07.2015 09:30
Найти взаимное расположение окружности радиуса R с центром в точке (x0, y0) и точки А с координатами (x1, y1). Dimazde Паскаль, Turbo Pascal, PascalABC.NET 1 10.12.2013 08:58
Нужно изменить на языке C++ Найти такую точку, что шар радиуса R с центром в этой точке, содержит min число точек заданного мн-ва. Alexandr95 Помощь студентам 0 26.05.2013 19:55