Форум программистов, компьютерный форум CyberForum.ru

Вычислительная геометрия (Даны координаты центра, R окружности, координаты точки вне окруж-ти. Найти точку пересечения одной из касательных с окруж-ю) - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.93
bolabol
0 / 0 / 0
Регистрация: 23.05.2013
Сообщений: 7
27.05.2013, 05:47     Вычислительная геометрия (Даны координаты центра, R окружности, координаты точки вне окруж-ти. Найти точку пересечения одной из касательных с окруж-ю) #1
Даны координаты центра (xc,yc) и радиус R окружности, координаты точки (x,y) вне окружности. Найти точку пересечения одной из касательных с окружностью.
Формат входных данных:
Пять вещественных чисел xc yc R x y — координаты центра и радиус окружности, координаты точки.
Формат выходных данных:
В первой строке одно число К, равное количеству точек пересечения касательных к окружности из заданной точки с самой окружностью. Далее в К строках координаты самих точек.
Пример:
input.txt output.txt
1 1 1 2 2 1.00 2.00


хелп с решение, пожалуйста =(
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.05.2013, 05:47     Вычислительная геометрия (Даны координаты центра, R окружности, координаты точки вне окруж-ти. Найти точку пересечения одной из касательных с окруж-ю)
Посмотрите здесь:

C++ Даны координаты вершин треугольника и координаты некоторой точки внутри него
Заданы координаты точки подвеса математического маятника A(xa, ya, za) и координаты одной из точек его наивысшего подъема B(xb, yb, zb). Найти координ C++
Найти координаты точек пересечения окружности с экспонентой и сформировать из них множество А C++
C++ По заданным координатам центра окружности и ее радиусу определить координаты точек пересечения окружности с осями координат.
C++ Найти координаты центра окружности
C++ Заданы координаты точки. Определите, лежит ли она вне окружности указанного радиуса с центром в начале координ
C++ Зачем в задании "найти длину окружности" помимо радиуса даны еще координаты центра?
Найти координаты второй точки, зная первую точку и расстояние между ними C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5946 / 5551 / 1784
Регистрация: 18.12.2011
Сообщений: 14,178
Завершенные тесты: 1
27.05.2013, 09:02     Вычислительная геометрия (Даны координаты центра, R окружности, координаты точки вне окруж-ти. Найти точку пересечения одной из касательных с окруж-ю) #2
Радиус окружности (R),
прямая соединяющая центр и заданную точку a=sqrt((xc-x)*(xc-x)+(yc-y)*(yc-y))
и касательная к окружности b
образуют прямоугольный треугольник ( a - гипотенуза).
b=sqrt(a*a-R*R)
Остается только решить систему уравнений
(x-x0)*(x-x0)+(y-y0)*(y-y0)=b*b
(xc-x0)*(xc-x0)+(yc-y0)*(yc-y0)=R*R
genock94
 Аватар для genock94
20 / 20 / 1
Регистрация: 16.11.2012
Сообщений: 348
27.05.2013, 16:34     Вычислительная геометрия (Даны координаты центра, R окружности, координаты точки вне окруж-ти. Найти точку пересечения одной из касательных с окруж-ю) #3
bolabol,
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
// помощь.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <conio.h>
#include <math.h>   
 
void ZapolnenieDannih();
 
FILE *fi=fopen("C:\\Example\\in.txt","rb");
FILE *fo=fopen("C:\\Example\\out.txt","wb");
double Xc,Yc,R,Xo,Yo;
double Xk1,Yk1;
double Xk2,Yk2;
double A,B,C,k1,k2;
int var=0;
long n;
 
int main()
{
    ZapolnenieDannih();
    if      ((Xo-Xc)*(Xo-Xc)+(Yo-Yc)*(Yo-Yc)<R*R)   //если точка лежит внутри окружности, то вывести сообщение об отсутствии касательных.
    {
        fprintf(fo,"Tochka lejit vnutri okrujnosti. Kasatel`nih ne sushestvuet.");
        return 0;
    }
    else if ((Xo-Xc)*(Xo-Xc)+(Yo-Yc)*(Yo-Yc)==R*R)  //если точка принадлежит окружности, то вывести сказать об этом и закончить работу программы.
    {
        fprintf(fo,"Tochka lejit na okrujnosti.");
        return 0;
    }
    else if (abs(Xo-Xc)==R)                         //если координата Xo=Xc-R или Xo=Xc+R, то касательная параллельна (O;Y) и проходит через точку (Xo;Yc)
    {
        fprintf(fo,"%.3lf %.3lf %.3lf %.3lf %.3lf %.3lf %.3lf\n",Xc,Yc,R,Xo,Yo,Xo,Yc);
        return 0;
    }
    else if (abs(Yo-Yc)==R)                         //если координата Yo=Yc-R или Yo=Yc+R, то касательная параллельна (O;X) и проходит через точку (Xc;Yo)
    {
        fprintf(fo,"%.3lf %.3lf %.3lf %.3lf %.3lf %.3lf %.3lf\n",Xc,Yc,R,Xo,Yo,Xc,Yo);
        return 0;
    }
    else if ((Xo-Xc)*(Xo-Xc)+(Yo-Yc)*(Yo-Yc)>R*R)   //если точка лежит вне окружности, то найти точку касания касательной с окружностью.
    {                                       
        A=2*Xc*Xo-Xc*Xc+R*R-Xo*Xo;
        B=Xc*Yc-Xc*Yo+Yo*Xo-Xo*Yc;
        C=R*R-Yc*Yc-Yo*Yo+2*Yc*Yo;
 
        k1=(-B+sqrt(B*B-A*C))/A;
        k2=-(-B+sqrt(B*B-A*C))/A;
 
        Xk1=(Xc+k1*(Yc+k1*Xo-Yo))/(k1*k1+1);
        Yk1=k1*(Xk1-Xo)+Yo;
        fprintf(fo,"%.3lf %.3lf %.3lf %.3lf %.3lf   %.3lf %.3lf\n",Xc,Yc,R,Xo,Yo,Xk1,Yk1);
 
    }
 
    //getch();
    return 0;
} 
 
void ZapolnenieDannih()
{
    fscanf(fi,"%lf",&Xc);
    fscanf(fi,"%lf",&Yc);
    fscanf(fi,"%lf",&R);
    fscanf(fi,"%lf",&Xo);
    fscanf(fi,"%lf",&Yo);
}
Для того, чтобы программа работала, необходимо создать два файла:
C:\Example\in.txt
C:\Example\out.txt
Yandex
Объявления
27.05.2013, 16:34     Вычислительная геометрия (Даны координаты центра, R окружности, координаты точки вне окруж-ти. Найти точку пересечения одной из касательных с окруж-ю)
Ответ Создать тему
Опции темы

Текущее время: 12:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru