Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/40: Рейтинг темы: голосов - 40, средняя оценка - 4.60
Заблокирован
1

Дайте готовый код нахождения точки пересечения окружности с прямой :-)

24.05.2015, 10:53. Показов 8005. Ответов 4
Метки нет (Все метки)

Нужен код нахождения точки пересечения окружности с прямой.
Прямая задана координатами двух точек в 2D. Окружность "сидит" на одном из концов прямой и имеет свой радиус. Ну в общем точка пересечения там одна. Допустим:
1. Прямая: A(x1,y1) ; B (x2,y2)
2. Окружности: Center(x1,y1), радиус R.

Я сам могу его составить, ну ёлки палки, реально просто лень Наверняка тут уже мелькали подобные темы.
Дайте линк на готовый код аморфному червю
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.05.2015, 10:53
Ответы с готовыми решениями:

Решить систему уравнений для нахождения точки пересечения окружности с прямой
Помогите решить систему уравнений для нахождения точки пересечения окружности с прямой....

Программа нахождения точек пересечения прямой и окружности
Здравствуйте. Мне дали следующую задачу: окружность задана координатами центра и радиусом....

Точки пересечения окружности и прямой
Определить число точек пересечения прямой y=Kx+b и окружности x^2+y^2=R^2....HELP!

Точки пересечения окружности и прямой
Необходимо создать программу которая находит точки пересечения окружности и прямой. Причем я задаю...

4
34 / 34 / 47
Регистрация: 20.04.2015
Сообщений: 198
24.05.2015, 11:12 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
#include <iostream>
#include <conio.h>
#include <fstream>
#include <string>
#include <io.h>
#include <cstdlib>
#include <math.h>
 
using namespace std;
 
void prover(double x,double y,double k,double b,double r)
{ //находим дискрименант квадратного уравнения
     double d=(pow((2*k*b-2*x-2*y*k),2)-(4+4*k*k)*(b*b-r*r+x*x+y*y-2*y*b));
 
  //если он меньше 0, уравнение не имеет решения
     if(d<0) 
     {
         cout<<"\n\nПрямая и окружность не пересекаются";//return;
     }
     else
     {
  //иначе находим корни квадратного уравнения
        double x1=((-(2*k*b-2*x-2*y*k)-sqrt(d))/(2+2*k*k));
        double x2=((-(2*k*b-2*x-2*y*k)+sqrt(d))/(2+2*k*k));
        double y1=k*x1+b;
        double y2=k*x2+b;
 //если абсциссы точек совпадают, то пересечение только в одной точке    
        if (x1==x2)  
        {
             cout << "\n\nПрямая и окружность имеют точку касания:\n";
             cout << x1 << ' ' << y1;
            
     //return;
        }
        else
        {
            cout << "\n\nПрямая и окружность пересекаются в точках:\n";
            cout << x1 << ' ' << y1 << '\n' << x2 << ' ' << y2 << '\n';
        }
     }
}
 
void main()
{
 
setlocale (LC_ALL, "Russian");
 
  
    char v='y';
    double x,y,x1,x2,y1,y2,k,b,r;
    
 
    while(v=='y' || v=='Y')
    {
  cout<<"\n Введите координаты центра окружности:\n"<<"x=";
  cin>>x;
  cout<<"y=";
  cin>>y;
  cout<<"Введите радиус окружности:\n"<<"R=";
  cin>>r;
 
  cout<<"Введите координаты точек прямой:\n"<<"x1=";
  cin>>x1;
  cout<<"y1=";
  cin>>y1;
  cout<<"x2=";
  cin>>x2;
  cout<<"y2=";
  cin>>y2;
  if (x1==x2 && y1==y2)
  {
      cout << "Введите две разные точки";
  }
  else
  {
      if (x1==x2)
      {
          k=(y1-y2)/(x1);
      }
      else
      {
        k=(y1-y2)/(x1-x2);
      }
      b=y1-k*x1;
      prover(y,x,k,b,r);
      
  }
  cout << "\nВыполнить ещё раз? y/n \n";
        cin >> v;
    }
 
}
0
Заблокирован
24.05.2015, 11:18  [ТС] 3
Сенкью вери мач
P.S.: мне конечно же не нужны были комментарии, всякие cout-ы и функии мэйн, я не студен
Спасибо!
P.S.: форум гючит, не могу плюсиков поставить, как отглючит - поставлю

Добавлено через 3 минуты
Ооой сколько лишних букв... долго читать... Лучше я уж сам в несколько строк ща всё выведу ...
0
Эксперт С++
4974 / 3082 / 456
Регистрация: 10.11.2010
Сообщений: 11,160
Записей в блоге: 10
24.05.2015, 11:30 4
Лучший ответ Сообщение было отмечено castaway как решение

Решение

Мог где-то ошибиться, но вроде правильно.
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
#include <iostream>
#include <cmath>
 
int main()
{
    double x1 = 100;
    double y1 = 100;
 
    double x2 = 200;
    double y2 = 101;
 
    double R = 50;
 
    double dx = x2 - x1;
    double dy = y2 - y1;
    double l = sqrt( dx * dx + dy * dy );
    dx /= l;
    dy /= l;
 
    std::cout << "x = " << x1 + dx * R << std::endl;
    std::cout << "y = " << y1 + dy * R << std::endl;
 
    return 0;
}
1
Заблокирован
24.05.2015, 11:39  [ТС] 5
Цитата Сообщение от castaway Посмотреть сообщение
Мог где-то ошибиться, но вроде правильно.
Ооо спасибо огромное, то что нужно
А то уж я сам почти всё вывел (вспоминал как раскрыть скобки в квадрате )
Почему - то на форуме не могу поставить ни лучший ответ ни спасибо
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.05.2015, 11:39

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

Найдите точки пересечения прямой и окружности
Здравствуйте. Мне дали следующую задачу: окружность задана координатами центра и радиусом....

Составить программу, определяющую точки пересечения окружности и прямой
составить программу, определяющую точки пересечения окружности x^2+y^2=R^2 и прямой y=a x+b. очень...

Получить точку на окружности (на хорде) между заданными точками и координаты пересечения окружности с прямой
Дано: Координаты двух точек на плоскости (в них требуется вписать окружность) (t1, t2) Радиус...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru