Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 25.05.2016
Сообщений: 27
1

Определить, пересекаются ли прямая и окружность

26.05.2016, 00:11. Показов 2023. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задана окружность с центром в точке О(x0,y0) и радиусом R0 и прямая y=ax+b. Определить, пересекаются ли прямая и окружность. При положительном ответе найти точки пересечения.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.05.2016, 00:11
Ответы с готовыми решениями:

Определить, пересекаются ли прямая и окружность
Задана окружность с центром в точке О(x0,y0) и радиусом R и прямая у=ах+b. Определить, пересекаются...

Определить, пересекаются ли прямая и окружность, и найти точки пересечения
задана окружность с центром в точке х(нулевое) и(нулевое) у и радиусом Р и прямая у=ах+в....

Определить, пересекаются ли прямая и окружность. При положительном ответе найти точки пересечения
.Задана окружность с центром в точке О(x0,y0) и радиусом R0 и прямая y=ax+b. Определить,...

Определить, пересекаются ли парабола и прямая
Определите, пересекаются ли парабола у=cx2+dx+f и прямая y=ax+b. При положительном ответе найти...

3
Эксперт С++
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
26.05.2016, 15:39 2
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
///////////////////////////////////////////////////////////////////////////////
//2.
///////////////////////////////////////////////////////////////////////////////
//Задана окружность с центром в точке О(x0,y0) и радиусом R0 и прямая y = ax + b.
//Определить, пересекаются ли прямая и окружность. При положительном ответе
//найти точки пересечения.
///////////////////////////////////////////////////////////////////////////////
#include <cmath>
#include <complex>
#include <iostream>
#include <string>
///////////////////////////////////////////////////////////////////////////////
typedef std::string                     T_str;
typedef double                          T_coord;
typedef std::complex    < T_coord   >   T_point;
typedef T_point                         T_direct;
///////////////////////////////////////////////////////////////////////////////
void    input_val_with_prompt
    (
        T_coord         &   val,
        T_str   const   &   prompt
    )
{
    std::cout   <<  '\t'
                <<  prompt;
 
    std::cin    >>  val;
}
///////////////////////////////////////////////////////////////////////////////
bool    successfully_set_intersection_points_of_line_and_circle
    (
        T_coord         k,
        T_coord         b,
 
        T_point         C,
        T_coord         R,
 
        T_point     &   p1,
        T_point     &   p2
    )
{
    T_point     line_point  ( 0,    b );
    T_direct    line_dir    ( 1,    k );
 
    if  (
                line_point
            ==  C
        )
    {
        line_point  +=  line_dir;
    }
 
    T_direct    dir_from_line_point_to_C        =   C   -   line_point;
 
    T_coord     angle                           =       arg( dir_from_line_point_to_C )
                                                    -   arg( line_dir );
 
    T_point     foot_of_perp_from_C_to_line     =       line_point
                                                    +       line_dir
                                                        /   abs( line_dir )
                                                        *   abs( dir_from_line_point_to_C )
                                                        *   cos( angle );
 
    T_coord     dist_from_C_to_line             =   abs (
                                                                foot_of_perp_from_C_to_line
                                                            -   C
                                                        );
 
    bool    bool_res    =       dist_from_C_to_line
                            <=  R;
 
    if( bool_res )
    {
        T_coord     dist_from_foot_to_p_res
            =       R
                *   sin (
                            acos    (
                                            dist_from_C_to_line
                                        /   R
                                    )
                        );
 
        auto    delta   =       line_dir
                            /   abs( line_dir )
                            *   dist_from_foot_to_p_res;
 
        p1  =   foot_of_perp_from_C_to_line     -   delta;
        p2  =   foot_of_perp_from_C_to_line     +   delta;
    }//if
 
    return  bool_res;
}
///////////////////////////////////////////////////////////////////////////////
int     main()
{
    std::cout   <<  "Enter coordinates of center C(Xc, Yc) and radius R of circle:"
                <<  std::endl;
 
    T_coord     Xc{};
    input_val_with_prompt( Xc,  "Xc = " );
 
    T_coord     Yc{};
    input_val_with_prompt( Yc,  "Yc = " );
 
    T_coord     R{};
    input_val_with_prompt( R,   "R = " );
 
    std::cout   <<  std::endl
                <<  "Enter coefficients of equations y = kx + b:"
                <<  std::endl;
 
    T_coord     k{};
    input_val_with_prompt( k,  "k = " );
 
    T_coord     b{};
    input_val_with_prompt( b,  "b = " );
 
    T_point     p1;
    T_point     p2;
 
    if  (
            successfully_set_intersection_points_of_line_and_circle
                (
                    k,
                    b,
 
                    { Xc,   Yc  },
                    abs(R),
 
                    p1,
                    p2
                )
        )
    {
        std::cout   <<  std::endl
                    <<  p1
                    <<  std::endl
                    <<  p2
                    <<  std::endl;
    }
    else
    {
        std::cout   <<  std::endl
                    <<  "Line and circle do not intersect."
                    <<  std::endl;
    }//if
}
1
0 / 0 / 0
Регистрация: 25.05.2016
Сообщений: 27
27.05.2016, 13:57  [ТС] 3
Это не оно.
0
1718 / 567 / 187
Регистрация: 12.03.2016
Сообщений: 2,169
27.05.2016, 17:29 4
Тогда просто составьте квадратное уравнение и решите его.
0
27.05.2016, 17:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.05.2016, 17:29
Помогаю со студенческими работами здесь

Определить, пересекаются ли парабола и прямая (найдите ошибку)
Определите, пересекаются ли парабола у=cx2+dx+f и прямая y=ax+b. При положительном ответе найти...

Оператор условия. Определить, пересекаются ли заданные кривая и прямая
Определить пересекаются ли кривая y=ax³+bx²+cx+d и прямая y=fx+g. При положительном ответе найти...

Определить, пересекаются ли контур прямоугольника и окружность
Задача такова есть координаты прямоугольника и круга. необходимо выяснить пересекаются они или...

Определить, сколько точек пересечения имеют прямая и окружность и найти координаты этих точек
Привет. Тут такое дело. В общем я неплохо знаю сам язык, но вот задачку решить не могу. Т.е не знаю...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru