Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ умножение многочлена http://www.cyberforum.ru/cpp-beginners/thread880135.html
C++ Выполнить сортировку одномерного массива X(100) методом Шелла задание: Выполнить сортировку одномерного массива X(100) методом Шелла. В отсортированном одномерном массиве X(100)выполнить поиск заданного элемента методом бинарного поиска. Вот программа: ... http://www.cyberforum.ru/cpp-beginners/thread880126.html
Написать программу, которая выражает среднее арифметическое элементов матрицы суммы целых чисел без учета значений мин и макс элементов C++
Написать программу, которая выражает ср. арифметическое элементов матрицы суммы целых чисел размерностью 3*3 без учета значений мин и макс элементов. Вывести на экран полученную сумму, а также мин и...
C++ Очередная сортировка в структуре студент
по заданию нужна сортировка по возрастанию номера групп, если я пытаюсь использовать для этого qsort, компилятор выдаёт фатальную ошибку. по возможности вставить эту сортировку после чтение массива...
C++ Бред со счетом http://www.cyberforum.ru/cpp-beginners/thread880119.html
С начало грешил на свой компилятор, но после попробовал на Visual Studio 2010 и тот же результат. Какого черта в коде ниже, 264.088/11 НЕ ровняется 24.008 ? Может тут надо что-то добавить ?...
C++ Работа с шифром (шифр Цезаря) В файле дан исходный текст. Написать две функции: encrypt() - принимает исходный текст, зашифровывает его, используя шифр Цезаря, и записывает результат во второй файл; decrypt() - принимает... подробнее

Показать сообщение отдельно
genock94
20 / 20 / 1
Регистрация: 16.11.2012
Сообщений: 348
27.05.2013, 16:34
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
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru