С Новым годом! Форум программистов, компьютерный форум, киберфорум
Геометрия
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/18: Рейтинг темы: голосов - 18, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 25.12.2020
Сообщений: 10

Найти координаты точек касания к окружности

17.05.2021, 17:55. Показов 3461. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Для построения рисунка в делфи нужны координаты точек касания к окружности.

Окружность и точка А могут располагаться в любом месте, потому мне нужно решение в общем виде.
Известны координаты центра и точки А, радиус, расстояние от центра до точки А, расстояние от точки А до точек касания.
Помогите, пожалуйста!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.05.2021, 17:55
Ответы с готовыми решениями:

Координаты центра окружности и точек касания
Здравствуйте. Пожалуйста,помогите еще вот с таким вопросом... Дано: координаты окружности О1 (x1,y1) координаты окружности О2(х2,у2) ...

Найти координаты точки касания окружности к эллипсу
Помогите, запутался в системах уравнений. Есть эллипс. а и b известны. Центр в нуле системы координат. Причем b=a*cos(beta). Угол beta...

Как найти площадь сектора окружности, зная координаты центра окружности и двух равноудаленных точек
Можно ли как-то найти площадь сектора, зная координаты центра (х0, у0) окружности и двух равноудаленных точек ( (х1, у1) и (х2, у2)) ?

14
1833 / 1027 / 192
Регистрация: 24.02.2013
Сообщений: 3,074
Записей в блоге: 12
17.05.2021, 18:28
Будет так. см.картинку.
Миниатюры
Найти координаты точек касания к окружности  
1
0 / 0 / 0
Регистрация: 25.12.2020
Сообщений: 10
17.05.2021, 22:35  [ТС]
Nacuott, а сами формулы, как координаты получить, можно? Из картинки не очень понятно.
Да и не сходится что-то.
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
17.05.2021, 23:25
Лучший ответ Сообщение было отмечено Raven-13 как решение

Решение

Raven-13, Вот я решал подобное в Делфи.
Нарисовать касательную к окружности
Вычислить координаты точек касания касательных к окружности
1
1715 / 1153 / 301
Регистрация: 05.10.2014
Сообщений: 5,602
17.05.2021, 23:26
Там какая-то громоздкая формула типа такого)
https://www.cyberforum.ru/cgi-bin/latex.cgi?\small [ \left\{ x={\frac {1}{ \left( {{\it y1}}^{2}-2\,{\it y1}\,{\it y0}+{{\it y0}}^{2}+{{\it x1}}^{2}-2\,{\it x1}\,{\it x0}+{{\it x0}}^{2} \right)  \left( {\it x0}-{\it x1} \right) } \left( \sqrt {- \left( {\it x0}-{\it x1} \right) ^{2} \left( -{{\it y1}}^{2}+2\,{\it y1}\,{\it y0}-{{\it y0}}^{2}-{{\it x1}}^{2}+2\,{\it x1}\,{\it x0}-{{\it x0}}^{2}+{R}^{2} \right) }{\it y0}\, \left| R \right| -\sqrt {- \left( {\it x0}-{\it x1} \right) ^{2} \left( -{{\it y1}}^{2}+2\,{\it y1}\,{\it y0}-{{\it y0}}^{2}-{{\it x1}}^{2}+2\,{\it x1}\,{\it x0}-{{\it x0}}^{2}+{R}^{2} \right) }{\it y1}\, \left| R \right| +{R}^{2}{{\it x0}}^{2}-2\,{R}^{2}{\it x0}\,{\it x1}+{R}^{2}{{\it x1}}^{2}+{{\it x0}}^{3}{\it x1}-3\,{{\it x0}}^{2}{{\it x1}}^{2}+3\,{\it x0}\,{{\it x1}}^{3}+{\it x0}\,{\it x1}\,{{\it y0}}^{2}-2\,{\it x0}\,{\it x1}\,{\it y0}\,{\it y1}+{\it x0}\,{\it x1}\,{{\it y1}}^{2}-{{\it x1}}^{4}-{{\it x1}}^{2}{{\it y0}}^{2}+2\,{{\it x1}}^{2}{\it y0}\,{\it y1}-{{\it x1}}^{2}{{\it y1}}^{2} \right) },y=-{\frac {1}{{{\it y1}}^{2}-2\,{\it y1}\,{\it y0}+{{\it y0}}^{2}+{{\it x1}}^{2}-2\,{\it x1}\,{\it x0}+{{\it x0}}^{2}} \left( -{R}^{2}{\it y0}+{R}^{2}{\it y1}-{{\it x0}}^{2}{\it y1}+2\,{\it x0}\,{\it x1}\,{\it y1}-{{\it x1}}^{2}{\it y1}-{{\it y0}}^{2}{\it y1}+2\,{\it y0}\,{{\it y1}}^{2}-{{\it y1}}^{3}+\sqrt {- \left( {\it x0}-{\it x1} \right) ^{2} \left( -{{\it y1}}^{2}+2\,{\it y1}\,{\it y0}-{{\it y0}}^{2}-{{\it x1}}^{2}+2\,{\it x1}\,{\it x0}-{{\it x0}}^{2}+{R}^{2} \right) } \left| R \right|  \right) } \right\} , \left\{ x=-{\frac {1}{ \left( {{\it y1}}^{2}-2\,{\it y1}\,{\it y0}+{{\it y0}}^{2}+{{\it x1}}^{2}-2\,{\it x1}\,{\it x0}+{{\it x0}}^{2} \right)  \left( {\it x0}-{\it x1} \right) } \left( \sqrt {- \left( {\it x0}-{\it x1} \right) ^{2} \left( -{{\it y1}}^{2}+2\,{\it y1}\,{\it y0}-{{\it y0}}^{2}-{{\it x1}}^{2}+2\,{\it x1}\,{\it x0}-{{\it x0}}^{2}+{R}^{2} \right) }{\it y0}\, \left| R \right| -\sqrt {- \left( {\it x0}-{\it x1} \right) ^{2} \left( -{{\it y1}}^{2}+2\,{\it y1}\,{\it y0}-{{\it y0}}^{2}-{{\it x1}}^{2}+2\,{\it x1}\,{\it x0}-{{\it x0}}^{2}+{R}^{2} \right) }{\it y1}\, \left| R \right| -{R}^{2}{{\it x0}}^{2}+2\,{R}^{2}{\it x0}\,{\it x1}-{R}^{2}{{\it x1}}^{2}-{{\it x0}}^{3}{\it x1}+3\,{{\it x0}}^{2}{{\it x1}}^{2}-3\,{\it x0}\,{{\it x1}}^{3}-{\it x0}\,{\it x1}\,{{\it y0}}^{2}+2\,{\it x0}\,{\it x1}\,{\it y0}\,{\it y1}-{\it x0}\,{\it x1}\,{{\it y1}}^{2}+{{\it x1}}^{4}+{{\it x1}}^{2}{{\it y0}}^{2}-2\,{{\it x1}}^{2}{\it y0}\,{\it y1}+{{\it x1}}^{2}{{\it y1}}^{2} \right) },y={\frac {1}{{{\it y1}}^{2}-2\,{\it y1}\,{\it y0}+{{\it y0}}^{2}+{{\it x1}}^{2}-2\,{\it x1}\,{\it x0}+{{\it x0}}^{2}} \left( {R}^{2}{\it y0}-{R}^{2}{\it y1}+{{\it x0}}^{2}{\it y1}-2\,{\it x0}\,{\it x1}\,{\it y1}+{{\it x1}}^{2}{\it y1}+{{\it y0}}^{2}{\it y1}-2\,{\it y0}\,{{\it y1}}^{2}+{{\it y1}}^{3}+\sqrt {- \left( {\it x0}-{\it x1} \right) ^{2} \left( -{{\it y1}}^{2}+2\,{\it y1}\,{\it y0}-{{\it y0}}^{2}-{{\it x1}}^{2}+2\,{\it x1}\,{\it x0}-{{\it x0}}^{2}+{R}^{2} \right) } \left| R \right|  \right) } \right\} ]
Решаем систему из уравнения окружности и окружности с центром в середине ОА и радиусом половина ОА
0
0 / 0 / 0
Регистрация: 25.12.2020
Сообщений: 10
17.05.2021, 23:37  [ТС]
mihailm, святые пельмешки! Я в этом и за год не разберусь

Puporev, спасибо! Буду пробовать ваш способ.
0
1833 / 1027 / 192
Регистрация: 24.02.2013
Сообщений: 3,074
Записей в блоге: 12
18.05.2021, 10:08
Цитата Сообщение от Raven-13 Посмотреть сообщение
Да и не сходится что-то.
На моей картинке окружность радиуса 3 , а на вашей 2
0
0 / 0 / 0
Регистрация: 25.12.2020
Сообщений: 10
18.05.2021, 10:45  [ТС]
Nacuott, ах вот оно что! В любом случае, я не могу произвольно задать радиус. Он высчитывается из уравнения окружности.
0
1833 / 1027 / 192
Регистрация: 24.02.2013
Сообщений: 3,074
Записей в блоге: 12
18.05.2021, 11:17
Цитата Сообщение от Raven-13 Посмотреть сообщение
Nacuott, ах вот оно что! В любом случае, я не могу произвольно задать радиус. Он высчитывается из уравнения окружности.
Так на моей картинке записана система двух уравнений, одно из которых уравнение окружности радиусом 3 (в уравнении 3 в квадрате =9), которой должны принадлежать искомые точки В и С. второе уравнение - это скалярное произведение векторов, которое должно быть равным нулю. Решаем систему двух уравнений с двумя неизвестными и получаем координаты искомых точек В и С.
Так по уравнению окружности просто определить ее радиус-это не проблема.

Добавлено через 24 минуты
Raven-13, на счет общей формулы. Только что Маткаду дал решить в буквах систему которая решает задачу , так длина одного решения (общей формулы) больше двойной длины монитора!. Так что горазд проще решать систему с конкретными данными.
0
0 / 0 / 0
Регистрация: 25.12.2020
Сообщений: 10
18.05.2021, 18:45  [ТС]
Puporev, не получается. У вас код рассчитан, что центр окружности расположен в начале осей. В этом случае касательные рисуются правильно. Но стоит сдвинуть центр, как они разворачиваются непонятно куда
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
18.05.2021, 22:40
Лучший ответ Сообщение было отмечено Raven-13 как решение

Решение

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
uses Math;//модуль для вычисления арксинусов
procedure TForm1.Button1Click(Sender: TObject);
var x,y:double; //коодинаты точки реальные
    xe,ye:integer;//экранные
    xo,yo:double;//координаты центра окружности реальные
    xoe,yoe:integer;//экранные
    r:double; //радиус окружности
    x1,y1,x2,y2:double;//координаты точек касания реальные
    x1e,y1e,x2e,y2e:integer;//экранные
    xk1,yk1,xk2,yk2:integer;//экранные координаты концов касательных
    a,b,d,d1:double;//переменые для вычисления точек касания
    c:integer;//центр начала кординат
    k:integer;//положение точек касания относительно оси Х
    i:integer;//счетчик цикла
    m:double;//масштаб
begin
if not TryStrToFloat(Edit1.Text,x)or(abs(x)>10)then
 begin
  ShowMessage('Неверно введена координата X');
  Edit1.Clear;
  Edit1.SetFocus;
  exit;
 end;
if not TryStrToFloat(Edit2.Text,y)or(abs(y)>10)then
 begin
  ShowMessage('Неверно введена координата Y');
  Edit2.Clear;
  Edit2.SetFocus;
  exit;
 end;
if not TryStrToFloat(Edit3.Text,r)or(r<1)or(r>5)then
 begin
  ShowMessage('Неверно введен радиус кружности');
  Edit3.Clear;
  Edit3.SetFocus;
  exit;
 end;
if not TryStrToFloat(Edit4.Text,xo)or(abs(xo)>5)then
 begin
  ShowMessage('Неверно введена координата X центра окружности');
  Edit4.Clear;
  Edit4.SetFocus;
  exit;
 end;
if not TryStrToFloat(Edit5.Text,yo)or(abs(yo)>5) then
 begin
  ShowMessage('Неверно введена координата Y окружности');
  Edit5.Clear;
  Edit5.SetFocus;
  exit;
 end;
d:=sqrt(sqr(x-xo)+sqr(y-yo));//расстояние от точки до центра окружности
if d<=r+1 then
 begin
  ShowMessage('Нельзя построить касательные');
  exit;
 end;
//экранные координаты начала координат  и масштаб
Image1.Width:=Image1.Height;
c:=Image1.Height div 2;
m:=(c-10)/10;
// Вычисление точек касания
d1:=sqrt(d*d-r*r); //расстояние от точки до точки касания
a:=arcsin((xo-x)/d);
b:=arcsin(r/d);
if y>yo then k:=-1 else k:=1;//точка выше или ниже оси
//координаты 1 точки касания
//реальные
x1:=x+d1*sin(a-b);
y1:=y+k*d1*cos(a-b);
//экранные
x1e:=c+round(x1*m);
y1e:=c-round(y1*m);
//координаты 2 точки касания
//реальные
x2:=x+d1*sin(a+b);
y2:=y+k*d1*cos(a+b);
//экранные
x2e:=c+round(x2*m);
y2e:=c-round(y2*m);
//координаты точки экранные
xe:=c+round(x*m);
ye:=c-round(y*m);
//координаты центра окружности экранные
xoe:=c+round(xo*m);
yoe:=c-round(yo*m);
//рисуем
 with Image1.Canvas do
 begin
 //коодинатную сетку
  moveto(c-round(10*m),c);
  lineto(c+round(10*m),c);
  moveto(c,c-round(10*m));
  lineto(c,c+round(10*m));
  pen.Style:=psDot;
  for i:=1 to 10 do
   begin
    moveto(c+round(i*m),c-round(10*m));
    lineto(c+round(i*m),c+round(10*m));
    moveto(c-round(i*m),c-round(10*m));
    lineto(c-round(i*m),c+round(10*m));
    moveto(c-round(10*m),c-round(i*m));
    lineto(c+round(10*m),c-round(i*m));
    moveto(c-round(10*m),c+round(i*m));
    lineto(c+round(10*m),c+round(i*m));
    moveto(c-round(10*m),c+round(10*m));
    textout(c+round(i*m)-10,c+5,inttostr(i));
    textout(c-round(i*m)+5,c+5,inttostr(-i));
    textout(c-20,c-round(i*m)+5,inttostr(i));
    textout(c-25,c+round(i*m),inttostr(-i));
   end;
  pen.Width:=2;
  pen.Color:=clRed;
  brush.Style:=bsClear;
  ellipse(xoe-round(r*m),yoe-round(r*m),xoe+round(r*m),yoe+round(r*m));
  pen.Width:=1;
  pen.Color:=clBlack;
  brush.Color:=clBlack;
  ellipse(xe-2,ye-2,xe+2,ye+2);
  pen.Color:=clBlue;
  moveto(xe,ye);
  lineto(x1e,y1e);
  moveto(xe,ye);
  lineto(x2e,y2e);
  end;
 end;
1
0 / 0 / 0
Регистрация: 25.12.2020
Сообщений: 10
19.05.2021, 19:09  [ТС]
Puporev, а что изменилось?)) Вы только новые переменные добавили, а формулы такие же.
В общем, после долгих экспериментов выяснила, что если в координатах центра х=0, то все работает правильно. В остальных случаях касательные мимо окружности. И чем больше х центра, тем больше они развернуты в сторону от окружности.
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
19.05.2021, 19:34
Цитата Сообщение от Raven-13 Посмотреть сообщение
В остальных случаях касательные мимо окружности.
Не врите.
Миниатюры
Найти координаты точек касания к окружности  
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
19.05.2021, 19:40
Цитата Сообщение от Raven-13 Посмотреть сообщение
Вы только новые переменные добавили, а формулы такие же.
А Вы сравните формулы там и здесь.
Сейчас
Delphi
1
2
3
4
5
6
7
r-вводится
.......................
d:=sqrt(sqr(x-xo)+sqr(y-yo));//расстояние от точки до центра окружности
....................................................
// Вычисление точек касания
d1:=sqrt(d*d-r*r); //расстояние от точки до точки касания
a:=arcsin((xo-x)/d);
Было
Delphi
1
2
3
4
5
6
r:=sqrt(5);
d:=sqrt(x*x+y*y);//расстояние от точки до центра окружности
................................................
// Вычисление точек касания
d1:=sqrt(d*d-r*r); //расстояние от точки до точки касания
a:=arcsin(-x/d);
1
0 / 0 / 0
Регистрация: 25.12.2020
Сообщений: 10
20.05.2021, 12:58  [ТС]
Puporev, это всё моя невнимательность. И всё получилось!! Внесла изменения вот в этой строчке
Delphi
1
 a:=arcsin((xo-x)/d);

Не по теме:

Спасибо за отзывчивость! Вы, правда, очень-очень помогли, просто спасли меня!

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.05.2021, 12:58
Помогаю со студенческими работами здесь

Найти координаты точек на окружности
Имеется: Центр окружности - 3,3 Радиус - 3 Угол - 90 градусов Требуется найти две точки, которые будут пересекать окружность. ...

Построить изображение центра вписанной в треугольник окружности и точек ее касания
Дано изображение равнобедренного треугольника с отношением боковой стороны и основания 6:5. построить изображение центра вписанной в него...

Найти координаты точек пересечения касательной и окружности
Необходимо найти координаты точек p1, p2, p3, p4.

Найти координаты точек пресечения окружности x2 + y2 - 8x - 2y - 8 = 0 с осями координат
Найти координаты точек пресечения окружности x2 + y2 - 8x - 2y - 8 = 0 с осями координат. ...

Найти координаты точек пресечения окружности x2 + y2 + 4x + y -12 = 0 с биссектрисой первой и третьей четвертей
Найти координаты точек пресечения окружности x2 + y2 + 4x + y -12 = 0 с биссектрисой первой и третьей четвертей. (двойки возле х и у...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru