Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
-1 / 0 / 0
Регистрация: 28.01.2016
Сообщений: 85

Построение прямой, которая касается двух заданных окружностей

22.12.2016, 20:31. Показов 4128. Ответов 54
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер! Ребята нужна помощь. Вообщем нужно сделать программу, задача такая: Построение прямой, которая касается двух заданных окружностей. Вот пример программы как именно надо сделать программу, только нужно: Построение прямой, которая касается двух заданных окружностей.
Может кто то знает как ето можно сделать, помогите.
Миниатюры
Построение прямой, которая касается двух заданных окружностей   Построение прямой, которая касается двух заданных окружностей   Построение прямой, которая касается двух заданных окружностей  

Построение прямой, которая касается двух заданных окружностей  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.12.2016, 20:31
Ответы с готовыми решениями:

Построение уравнения прямой, проходящей через точки пересечения двух заданных окружностей
Помогите с задачкой на Делфи... Построение уравнения прямой, что проходит через точки пересечения двух заданных окружностей: x и y ...

составить уравнение окружности,которая имеет центр в точке S(8,6) и касается прямой 5x-12y-46=0
помогите составить уравнение окружности,которая имеет центр в точке S(8,6) и касается прямой 5x-12y-46=0

Составить уравнение окружности, которая имеет центр в точке S(8,6) и касается прямой 5x-12y-46=0
помогите составить уравнение окружности,которая имеет центр в точке S(8,6) и касается прямой 5x-12y-46=0

54
 Аватар для lifeforce
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
29.12.2016, 14:24
Студворк — интернет-сервис помощи студентам
Lenok S, Точка соприкосновения

Добавлено через 53 секунды
Если известно, что соприкасаются, то
X = (CenterX1 * R2 + CenterX2 * R1) / (R1 + R2)
0
 Аватар для lifeforce
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
29.12.2016, 14:43
1:точка пересечения двух линий у тебя уже есть (координата х.у)
2: от точки до круга тоже есть значение которое уже есть.(длина )
3:вычисляем радиус второй окружности для пересечения с первой(длина делим на 2 получаем радиус второго круга)
вот получается что все есть только надо подставить все числа в формулу и получить координаты соприкосновения.
Миниатюры
Построение прямой, которая касается двух заданных окружностей  
1
-1 / 0 / 0
Регистрация: 28.01.2016
Сообщений: 85
29.12.2016, 16:53  [ТС]
Извини, за глупый вопрос я в С++ Builder не шарю , скажи пожалуйста как ето записать на мове С++ Builder, что бы получить точку соприкосновение окружностей с прямой.
0
 Аватар для lifeforce
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
29.12.2016, 17:26
Lenok S,
ну даже совсем думать не хочешь!
смотри
C++
1
2
//Побудова кола R
Form1->Image1->Canvas->MoveTo(xp+250,yp+250);// начало (точка пересечения двух линий)
здесь у тебя координата тех самых линий (их точка пересечения)

а здесь
C++
1
Form1->Image1->Canvas->Pixels[x0+250][y0+250]=clRed;// координата центра круга
теперь нам надо найти середину в которой и будет точка другого круга для пересечения с основным.
ищем координаты
C++
1
2
int xr = (x0+250+xp+250)/2;//
int yr = (y0+250+yp+250)/2;//
есть теперь координаты для второго круга
и теперь надо узнать длину чтоб записать ее как радиус.
C++
1
int RR =  x0+250 - xr;// радиус
теперь можешь поставить точку (центр круга) для примера.

Добавлено через 1 минуту
C++
1
Form1->Image1->Canvas->Pixels[xl][yl]=clRed;
Добавлено через 3 минуты
и зачем тебе это программирование?
тебе ведь совсем не поверят в учебке что ты сама его решила.
0
-1 / 0 / 0
Регистрация: 28.01.2016
Сообщений: 85
29.12.2016, 17:36  [ТС]
Спасибо, ето не важно. Мне нужно его сдать, а поверят они или нет ето уже второй вопрос.
0
 Аватар для lifeforce
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
29.12.2016, 17:47
но для радиуса нужна Формула пифагора вычисление расстояния
так как
Цитата Сообщение от lifeforce Посмотреть сообщение
int RR = x0+250 - xr;// радиус
это будет правильным если при условии что У остается неизменным.
0
-1 / 0 / 0
Регистрация: 28.01.2016
Сообщений: 85
29.12.2016, 17:49  [ТС]
Скажи, а как ету формулу задействовать?
0
 Аватар для lifeforce
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
29.12.2016, 19:06
внимательно просмотри код и вставь только тот текст который я добавил.
C++
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
l1=r/sin(a3);
l2=l1*sin(a4);
l3=l1*cos(a4);
x0=xp+l3;
y0=yp+l2;
 
int xr = (x0+250+xp+250)/2;//
int yr = (y0+250+yp+250)/2;//
int
wxr = xr,
wyr=  yr,
RR = 0,
sum=0;
wxr= (x0+250-wxr)*(x0+250-wxr);
wyr= (y0+250-wyr)*(y0+250-wyr);
sum = (wxr+wyr);  // ShowMessage(sum);
if (sum<0) sum=~sum+1;
RR = sqrt(sum);
 
//Побудова кола R
Form1->Image1->Canvas->MoveTo(xp+250,yp+250);// начало (точка пересечения двух линий)
Form1->Image1->Canvas->Ellipse(x0-r+250,y0-r+250,x0+r+250,y0+r+250);//
Form1->Image1->Canvas->Pixels[x0+250][y0+250]=clRed;// координата центра круга
 
//Form1->Image1->Canvas->MoveTo(xr,yr);
//Form1->Image1->Canvas->Ellipse(xr-RR,yr-RR,xr+RR,yr+RR);
 
l1=rr/sin(a3);
l2=l1*sin(a4);
l3=l1*cos(a4);
x0=xp+l3;
y0=yp+l2;
 
int xl = (x0+250+xp+250)/2;// int RR = x0+250 - xr;// радиус
int yl = (y0+250+yp+250)/2;//
int
wxl = xl,
wyl=yl,
RL = 0,
suml=0;
wxl= (x0+250-wxl)*(x0+250-wxl);
wyl=(y0+250-wyl)*(y0+250-wyl);
suml = (wxl+wyl);  //
if (suml<0) suml=~suml+1;
RL = sqrt(suml);
 
//Побудова кола -R
Form1->Image1->Canvas->MoveTo(xp+250,yp+250);
Form1->Image1->Canvas->Ellipse(x0-rr+250,y0-rr+250,x0+rr+250,y0+rr+250);
Form1->Image1->Canvas->Pixels[x0+250][y0+250]=clRed;
 
 
//Form1->Image1->Canvas->MoveTo(xl,yl);
//Form1->Image1->Canvas->Ellipse(xl-RL,yl-RL,xl+RL,yl+RL);
здесь вычисления по формуле пифагора
радиуса.
0
 Аватар для lifeforce
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
29.12.2016, 19:17
пример работы
ну а теперь подставь формулы которые я выложил выше .
ведь прибавлять и умножать умеешь.
все данные теперь есть.
успехов!
Миниатюры
Построение прямой, которая касается двух заданных окружностей  
1
-1 / 0 / 0
Регистрация: 28.01.2016
Сообщений: 85
29.12.2016, 19:26  [ТС]
Спасибо, сейчас попробую.
0
-1 / 0 / 0
Регистрация: 28.01.2016
Сообщений: 85
29.12.2016, 19:43  [ТС]
Вот все сделала, как вы говорили, не чего не меняется(
Миниатюры
Построение прямой, которая касается двух заданных окружностей  
0
-1 / 0 / 0
Регистрация: 28.01.2016
Сообщений: 85
29.12.2016, 22:04  [ТС]
0
-1 / 0 / 0
Регистрация: 28.01.2016
Сообщений: 85
29.12.2016, 22:44  [ТС]
Добрый вечер! Ребята нужно построить точки соприкосновения там, де окружности касаются прямой и сделать координаты центра кола. Помогите пожалуйста ето сделать. Не шарю как ето делать, помогите пожалуйста сделать.
Миниатюры
Построение прямой, которая касается двух заданных окружностей  
0
-1 / 0 / 0
Регистрация: 28.01.2016
Сообщений: 85
29.12.2016, 22:48  [ТС]
Вот код программы:
C++
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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
#include "math.h"
#include "Unit2.h"
#include "stdio.h"
 
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
float x,y,xd,yd,x1,x2,y1,y2,a,b,xt1,yt1,xt2,yt2,xt3,yt3,xt4,yt4,xmax,xmin,ymax,ymin,m=1,s;
AnsiString ozn;
 
int px(float x)
{
return x+Form2->Image1->Width/2;
}
 
int py(float y)
{
return Form2->Image1->Height/2-y;
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
 
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 
float a1=10, a2=2,a3, a4, b1=100, b2=50, xp, yp, l1, l2, l3, r=100, rr=-100, x0, y0,xd,yd;
a1=StrToFloat(Edit1->Text)*m;
b1=StrToFloat(Edit2->Text)*m;
a2=StrToFloat(Edit3->Text)*m;
b2=StrToFloat(Edit4->Text)*m;
r=StrToFloat(Edit5->Text)*m;
rr=-(StrToFloat(Edit6->Text))*m;// инвертируем число в отрицательное
 
 
//
a4= ((atan(a2)*180/M_PI+atan(a1)*180/M_PI)/2)*M_PI/180;
xp=(b2-b1)/(a1-a2);
yp=a1*xp+b1;
a3= (a4*180/M_PI-atan(a1)*180/M_PI)*M_PI/180;
 
//вычисляем формулу
l1=r/sin(a3);
l2=l1*sin(a4);
l3=l1*cos(a4);
x0=xp+l3;
y0=yp+l2;
 
//Побудова кола R
Form1->Image1->Canvas->MoveTo(xp+250,yp+250);
Form1->Image1->Canvas->Ellipse(x0-r+250,y0-r+250,x0+r+250,y0+r+250);
 
// ставим точку!!!
Form1->Image1->Canvas->Pixels[x0+250][y0+250]=clRed;
 
//Малюємо коло красним коляром
Form1->Image1->Canvas->Pen->Color=clRed;//  bsClear;
 
//тут повторно вычисляем формулу но уже для отрицательного результата
l1=rr/sin(a3);
l2=l1*sin(a4);
l3=l1*cos(a4);
x0=xp+l3;
y0=yp+l2;
 
//
Label6->Caption="a1="+FloatToStr(atan(a1)*180/M_PI)+" a2="+FloatToStr(atan(a2)*180/M_PI)
+"  a3="+FloatToStr(atan(a3)*180/M_PI)
+"  a4="+FloatToStr(((atan(a2)*180/M_PI+atan(a1)*180/M_PI)/2));
Label7->Caption=" l1="+FloatToStr(l1)+" l2="+FloatToStr(l2)+" xo="+FloatToStr(x0)+" y0="+ FloatToStr(y0);
 
//Побудова кола -R и малюємо коло с заданным радіусом на протилежній стороні графіка
Form1->Image1->Canvas->MoveTo(xp+250,yp+250);
Form1->Image1->Canvas->Ellipse(x0-rr+250,y0-rr+250,x0+rr+250,y0+rr+250);
 
//ставим точку!!!
Form1->Image1->Canvas->Pixels[x0+250][y0+250]=clRed;
 
//Малюємо пряму синім коляром
Form1->Image1->Canvas->Pen->Color=clBlue;//  bsClear;
 
//пряма
Form1->Image1->Canvas->MoveTo(xp+250,yp+250);
for (int j=-250; j<250; j++)
{
Form1->Image1->Canvas->LineTo(j+250,a2*j+b2+250);
}
//---------------------------------------------------------------------------
Form1->Image1->Canvas->Pen->Color=(TColor)RGB(0,0,0);
Form1->Image1->Canvas->MoveTo(0,Form1->Image1->Height/2);
Form1->Image1->Canvas->LineTo(Form1->Image1->Width,Form1->Image1->Height/2);
Form1->Image1->Canvas->MoveTo(Form1->Image1->Width/2,0);
Form1->Image1->Canvas->LineTo(Form1->Image1->Width/2,Form1->Image1->Height);
 
for (xd=0; xd<=Form1->Image1->Width*m; xd=xd+50)
{
 Form1->Image1->Canvas->MoveTo(px(xd*m),py(-5));
 Form1->Image1->Canvas->LineTo(px(xd*m),py(5));
 Form1->Image1->Canvas->TextOutA(px(xd*m-10),py(-10),FloatToStr(xd));
 }
for (xd=0; xd>=-Form1->Image1->Width*m; xd=xd-50)
{
 Form1->Image1->Canvas->MoveTo(px(xd*m),py(-5));
 Form1->Image1->Canvas->LineTo(px(xd*m),py(5));
 Form1->Image1->Canvas->TextOutA(px(xd*m-10),py(-10),FloatToStr(xd));
 }
  for (yd=50; yd<=Form1->Image1->Height*m; yd=yd+50)
{
 Form1->Image1->Canvas->MoveTo(px(-5),py(yd*m));
 Form1->Image1->Canvas->LineTo(px(5),py(yd*m));
 Form1->Image1->Canvas->TextOutA(px(10),py(yd*m+5),FloatToStr(yd));
 }
for (yd=-50; yd>=-Form1->Image1->Height*m; yd=yd-50)
{
 Form1->Image1->Canvas->MoveTo(px(-5),py(yd*m));
 Form1->Image1->Canvas->LineTo(px(5),py(yd*m));
 Form1->Image1->Canvas->TextOutA(px(10),py(yd*m+5),FloatToStr(yd));
 }
 }
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Form1->Image1->Canvas->Rectangle(0,0,800,800);
}
//---------------------------------------------------------------------------
 void __fastcall TForm1::N1Click(TObject *Sender)
{
Form1->Hide();
Form2->Show();
}
//---------------------------------------------------------------------------
  void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
int x_z = X;
int y_z= Y;
Form1->Label9->Caption="X= "+IntToStr(x_z);
Form1->Label10->Caption="Y= "+IntToStr(y_z);
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button3Click(TObject *Sender)
{
m=m-0.1;
 
Form1->Image1->Canvas->Rectangle(0,0,Form1->ClientWidth,Form1->Height);
Form1->Image1->Canvas->MoveTo(0,Form1->Image1->Height/2);
Form1->Image1->Canvas->LineTo(Form1->Image1->Width,Form1->Image1->Height/2);
Form1->Image1->Canvas->MoveTo(Form1->Image1->Width/2,0);
Form1->Image1->Canvas->LineTo(Form1->Image1->Width/2,Form1->Image1->Height);
 
for (xd=0; xd<=Form1->Image1->Width*m; xd=xd+50)
{
 Form1->Image1->Canvas->MoveTo(px(xd*m),py(-5));
 Form1->Image1->Canvas->LineTo(px(xd*m),py(5));
 Form1->Image1->Canvas->TextOutA(px(xd*m-10),py(-10),FloatToStr(xd));
 }
for (xd=0; xd>=-Form1->Image1->Width*m; xd=xd-50)
{
 Form1->Image1->Canvas->MoveTo(px(xd*m),py(-5));
 Form1->Image1->Canvas->LineTo(px(xd*m),py(5));
 Form1->Image1->Canvas->TextOutA(px(xd*m-10),py(-10),FloatToStr(xd));
 }
 
 for (yd=50; yd<=Form1->Image1->Height*m; yd=yd+50)
{
 Form1->Image1->Canvas->MoveTo(px(-5),py(yd*m));
 Form1->Image1->Canvas->LineTo(px(5),py(yd*m));
 Form1->Image1->Canvas->TextOutA(px(10),py(yd*m+5),FloatToStr(yd));
 }
for (yd=-50; yd>=-Form1->Image1->Height*m; yd=yd-50)
{
 Form1->Image1->Canvas->MoveTo(px(-5),py(yd*m));
 Form1->Image1->Canvas->LineTo(px(5),py(yd*m));
 Form1->Image1->Canvas->TextOutA(px(10),py(yd*m+5),FloatToStr(yd));
 }
 Button1Click(0);
 
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button4Click(TObject *Sender)
{
 
m=m+0.1;
 
Form1->Image1->Canvas->Rectangle(0,0,Form1->Width,Form1->Height);
Form1->Image1->Canvas->MoveTo(0,Form1->Image1->Height/2);
Form1->Image1->Canvas->LineTo(Form1->Image1->Width,Form1->Image1->Height/2);
Form1->Image1->Canvas->MoveTo(Form1->Image1->Width/2,0);
Form1->Image1->Canvas->LineTo(Form1->Image1->Width/2,Form1->Image1->Height);
 
for (xd=0; xd<=Form1->Image1->Width*m; xd=xd+50)
{
 Form1->Image1->Canvas->MoveTo(px(xd*m),py(-5));
 Form1->Image1->Canvas->LineTo(px(xd*m),py(5));
 Form1->Image1->Canvas->TextOutA(px(xd*m-10),py(-10),FloatToStr(xd));
 }
for (xd=0; xd>=-Form1->Image1->Width*m; xd=xd-50)
{
 Form1->Image1->Canvas->MoveTo(px(xd*m),py(-5));
 Form1->Image1->Canvas->LineTo(px(xd*m),py(5));
 Form1->Image1->Canvas->TextOutA(px(xd*m-10),py(-10),FloatToStr(xd));
 }
  for (yd=50; yd<=Form1->Image1->Height*m; yd=yd+50)
{
 Form1->Image1->Canvas->MoveTo(px(-5),py(yd*m));
 Form1->Image1->Canvas->LineTo(px(5),py(yd*m));
 Form1->Image1->Canvas->TextOutA(px(10),py(yd*m+5),FloatToStr(yd));
 }
for (yd=-50; yd>=-Form1->Image1->Height*m; yd=yd-50)
{
 Form1->Image1->Canvas->MoveTo(px(-5),py(yd*m));
 Form1->Image1->Canvas->LineTo(px(5),py(yd*m));
 Form1->Image1->Canvas->TextOutA(px(10),py(yd*m+5),FloatToStr(yd));
 }
 Button1Click(0);
}
0
 Аватар для lifeforce
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
30.12.2016, 21:20
Lenok S,
опять все в кашу!
я тебе там отредактировал события кнопок:
C++
1
2
3
void __fastcall TForm1::Button1Click(TObject *Sender)
void __fastcall TForm1::Button3Click(TObject *Sender)
void __fastcall TForm1::Button4Click(TObject *Sender)
замени их из моего кода.

C++
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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
#include "math.h"
#include "Unit2.h"
#include "stdio.h"
 
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
float x,y,xd,yd,x1,x2,y1,y2,a,b,xt1,yt1,xt2,yt2,xt3,yt3,xt4,yt4,xmax,xmin,ymax,ymin,m=1,s;
AnsiString ozn;
 
int px(float x)
{
return x+Form2->Image1->Width/2;
}
 
int py(float y)
{
return Form2->Image1->Height/2-y;
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
 
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 
float a1=10, a2=2,a3, a4, b1=100, b2=50, xp, yp, l1, l2, l3, r=100, rr=100, x0, y0,xd,yd;
a1=StrToFloat(Edit1->Text)*m;
b1=StrToFloat(Edit2->Text)*m;
a2=StrToFloat(Edit3->Text)*m;
b2=StrToFloat(Edit4->Text)*m;
r=StrToFloat(Edit5->Text)*m;
rr=-(StrToFloat(Edit6->Text))*m;// инвертируем число в отрицательное
 
 
//
a4= ((atan(a2)*180/M_PI+atan(a1)*180/M_PI)/2)*M_PI/180;
xp=(b2-b1)/(a1-a2);
yp=a1*xp+b1;
a3= (a4*180/M_PI-atan(a1)*180/M_PI)*M_PI/180;
 
 
 
//вычисляем формулу
l1=r/sin(a3);
l2=l1*sin(a4);
l3=l1*cos(a4);
x0=xp+l3;
y0=yp+l2;
// формула пифагора
int xr = (x0+250+xp+250)/2;//
int yr = (y0+250+yp+250)/2;//
int
wxr = xr,
wyr=  yr,
RR = 0,
sum=0;
wxr= (x0+250-wxr)*(x0+250-wxr);
wyr= (y0+250-wyr)*(y0+250-wyr);
sum = (wxr+wyr); // 
if (sum<0) sum=~sum+1;
RR = sqrt(sum);// радиус правого круга
//Form1->Image1->Canvas->MoveTo(xr,yr);//для примера для правой стороны
//Form1->Image1->Canvas->Ellipse(xr-RR,yr-RR,xr+RR,yr+RR);//можно посмотреть круг пересечения
 
//Малюємо коло красним коляром
Form1->Image1->Canvas->Pen->Color=clRed;//  bsClear;
 
//Побудова кола R
Form1->Image1->Canvas->MoveTo(xp+250,yp+250);
Form1->Image1->Canvas->Ellipse(x0-r+250,y0-r+250,x0+r+250,y0+r+250); 
// ставим точку!!!
Form1->Image1->Canvas->Pixels[x0+250][y0+250]=clRed;
 
//тут повторно вычисляем формулу но уже для отрицательного результата
l1=rr/sin(a3);
l2=l1*sin(a4);
l3=l1*cos(a4);
x0=xp+l3;
y0=yp+l2;
// формула пифагора
int xl = (x0+250+xp+250)/2;// int RR = x0+250 - xr;// радиус
int yl = (y0+250+yp+250)/2;//
int
wxl = xl,
wyl=yl,
RL = 0,
suml=0;
wxl= (x0+250-wxl)*(x0+250-wxl);
wyl=(y0+250-wyl)*(y0+250-wyl);
suml = (wxl+wyl);  //
if (suml<0) suml=~suml+1;
RL = sqrt(suml);// радиус левого круга 
//Form1->Image1->Canvas->MoveTo(xl,yl);//для примера для левой стороны
//Form1->Image1->Canvas->Ellipse(xl-RL,yl-RL,xl+RL,yl+RL);//можно посмотреть круг пересечения
/*
//а это тебе зачем????
Label6->Caption="a1="+FloatToStr(atan(a1)*180/M_PI)+" a2="+FloatToStr(atan(a2)*180/M_PI)
+"  a3="+FloatToStr(atan(a3)*180/M_PI)
+"  a4="+FloatToStr(((atan(a2)*180/M_PI+atan(a1)*180/M_PI)/2));
//здесь выведется результат только для левого круга ВСЕГДА!
Label7->Caption=" l1="+FloatToStr(l1)+" l2="+FloatToStr(l2)+" x0="+FloatToStr(x0)+" y0="+ FloatToStr(y0);
*/
//Малюємо пряму синім коляром
Form1->Image1->Canvas->Pen->Color=clBlue;//  bsClear;
 
//Побудова кола -R и малюємо коло с заданным радіусом на протилежній стороні графіка
Form1->Image1->Canvas->MoveTo(xp+250,yp+250);
Form1->Image1->Canvas->Ellipse(x0-rr+250,y0-rr+250,x0+rr+250,y0+rr+250); 
//ставим точку!!!
Form1->Image1->Canvas->Pixels[x0+250][y0+250]=clRed;
 
 
Form1->Image1->Canvas->Pen->Color=clBlack;//линии рисуем черным 
//пряма
Form1->Image1->Canvas->MoveTo(xp+250,yp+250);
for (int j=-250; j<250; j++)
{
Form1->Image1->Canvas->LineTo(j+250,a2*j+b2+250);
}
//---------------------------------------------------------------------------
Form1->Image1->Canvas->Pen->Color=(TColor)RGB(0,0,0);
Form1->Image1->Canvas->MoveTo(0,Form1->Image1->Height/2);
Form1->Image1->Canvas->LineTo(Form1->Image1->Width,Form1->Image1->Height/2);
Form1->Image1->Canvas->MoveTo(Form1->Image1->Width/2,0);
Form1->Image1->Canvas->LineTo(Form1->Image1->Width/2,Form1->Image1->Height);
 
for (xd=0; xd<=Form1->Image1->Width*m; xd=xd+50)
{
 Form1->Image1->Canvas->MoveTo(px(xd*m),py(-5));
 Form1->Image1->Canvas->LineTo(px(xd*m),py(5));
 Form1->Image1->Canvas->TextOutA(px(xd*m-10),py(-10),FloatToStr(xd));
 }
for (xd=0; xd>=-Form1->Image1->Width*m; xd=xd-50)
{
 Form1->Image1->Canvas->MoveTo(px(xd*m),py(-5));
 Form1->Image1->Canvas->LineTo(px(xd*m),py(5));
 Form1->Image1->Canvas->TextOutA(px(xd*m-10),py(-10),FloatToStr(xd));
 }
  for (yd=50; yd<=Form1->Image1->Height*m; yd=yd+50)
{
 Form1->Image1->Canvas->MoveTo(px(-5),py(yd*m));
 Form1->Image1->Canvas->LineTo(px(5),py(yd*m));
 Form1->Image1->Canvas->TextOutA(px(10),py(yd*m+5),FloatToStr(yd));
 }
for (yd=-50; yd>=-Form1->Image1->Height*m; yd=yd-50)
{
 Form1->Image1->Canvas->MoveTo(px(-5),py(yd*m));
 Form1->Image1->Canvas->LineTo(px(5),py(yd*m));
 Form1->Image1->Canvas->TextOutA(px(10),py(yd*m+5),FloatToStr(yd));
 }
 }
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Form1->Image1->Canvas->Rectangle(0,0,800,800);
}
//---------------------------------------------------------------------------
 void __fastcall TForm1::N1Click(TObject *Sender)
{
Form1->Hide();
Form2->Show();
}
//---------------------------------------------------------------------------
  void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
int x_z = X;
int y_z= Y;
Form1->Label9->Caption="X= "+IntToStr(x_z);
Form1->Label10->Caption="Y= "+IntToStr(y_z);
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button3Click(TObject *Sender)
{
m=m-0.1;
 
Form1->Image1->Canvas->Rectangle(0,0,Form1->ClientWidth,Form1->Height);
Form1->Image1->Canvas->MoveTo(0,Form1->Image1->Height/2);
Form1->Image1->Canvas->LineTo(Form1->Image1->Width,Form1->Image1->Height/2);
Form1->Image1->Canvas->MoveTo(Form1->Image1->Width/2,0);
Form1->Image1->Canvas->LineTo(Form1->Image1->Width/2,Form1->Image1->Height);
// здесь код тебе не нужен так как его опять вызываешь из кнопки 1 
 Button1Click(0);
 
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button4Click(TObject *Sender)
{
 
m=m+0.1;
 
Form1->Image1->Canvas->Rectangle(0,0,Form1->Width,Form1->Height);
Form1->Image1->Canvas->MoveTo(0,Form1->Image1->Height/2);
Form1->Image1->Canvas->LineTo(Form1->Image1->Width,Form1->Image1->Height/2);
Form1->Image1->Canvas->MoveTo(Form1->Image1->Width/2,0);
Form1->Image1->Canvas->LineTo(Form1->Image1->Width/2,Form1->Image1->Height);
// здесь код тебе не нужен так как его опять вызываешь из кнопки 1 
 Button1Click(0);
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.12.2016, 21:20

Пересечение двух окружностей в 3д заданных центром, осью, радиусом
Центры окружностей совпадают и в начале координат. Радиусы 1. Оси единичные вектора. Как найти пересечение? Может это система...

количество разных общих касательных для заданных двух окружностей
Я некак не могу решыть ...... Вот ети задачи : Задача №1 Васе на день рождения подарили много шариков и игрушечный лазер.Шарики надуты...

Оформление графика x-y для построение двух окружностей
Подскажите, пожалуйста начинающему в Mathcad-е. При разборке задачи по теоретической механике выполненной в Mathcad столкнулся с трудностью...

На прямой найти точку, равноудаленную от двух заданных точек
Задачи, вроде как, легкие. Но, как бы я не решил (решал с помощью формулы квадрата расстояния между двумя точками) все равно ответ...

Найти первообразную для функции f(x), график которой касается прямой g(x)
f(x)=x+3, g(x)=0


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

Или воспользуйтесь поиском по форуму:
55
Ответ Создать тему
Новые блоги и статьи
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru