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

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

27.05.2013, 05:47. Просмотров 5232. Ответов 2
Метки нет (Все метки)

Даны координаты центра (xc,yc) и радиус R окружности, координаты точки (x,y) вне окружности. Найти точку пересечения одной из касательных с окружностью.
Формат входных данных:
Пять вещественных чисел xc yc R x y — координаты центра и радиус окружности, координаты точки.
Формат выходных данных:
В первой строке одно число К, равное количеству точек пересечения касательных к окружности из заданной точки с самой окружностью. Далее в К строках координаты самих точек.
Пример:
input.txt output.txt
1 1 1 2 2 1.00 2.00


хелп с решение, пожалуйста =(
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.05.2013, 05:47
Ответы с готовыми решениями:

Найти координаты точки пересечения окружности
Здравствуйте. Нужно написать программу на паскале. Заданы координаты центра окружности, ее радиус и...

По заданным координатам центра окружности и ее радиусу определить координаты точек пересечения окружности с осями координат.
По заданным координатам центра окружности и ее радиусу определить координаты точек пересечения...

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

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

2
Модератор
Эксперт С++
9928 / 8445 / 5135
Регистрация: 18.12.2011
Сообщений: 22,633
27.05.2013, 09:02 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
0
21 / 21 / 8
Регистрация: 16.11.2012
Сообщений: 349
27.05.2013, 16:34 3
Лучший ответ Сообщение было отмечено bolabol как решение

Решение

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
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.05.2013, 16:34

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

Даны координаты центра круга и его радиус, а также координаты точки. Лежит ли эта точка внутри круга?
Даны координаты центра круга и его радиус, а также координаты точки. Лежит ли эта точка внутри...

Даны координаты точки (a,b). Найти координаты остальных точек (c,d),(e,j)
Даны координаты точки (a,b). Найти координаты остальных точек (c,d),(e,j). На рисунке обозначены...

Зачем в задании "найти длину окружности" помимо радиуса даны еще координаты центра?
Всем привет дали задачку 19. Даны координаты центров двух окружностей, а также их радиусы....

Даны координаты вершин треугольника и координаты некоторой точки внутри него. Найти расстояние от данной точки до ближайшей стороны треугольника
Даны координаты вершин треугольника и координаты некоторой точки внутри него. Найти расстояние от...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.