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

Описать переменную круг, в которой содержатся все дан* ные для построения круга в декартовой системе координат - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Дан массив A(N). Сформулировать массив B(M), элементами которого являются большие из двух рядом стоящих в массиве A чисел http://www.cyberforum.ru/cpp-beginners/thread993595.html
Нужен код программы. Помогите даме пожалуйста.
C++ Информационная система учета рабочего времени Информационная система учета рабочего времени. Система учета рабочего времени позволяет руководителям выдавать задания и отслеживать ход их выполнения, а исполнителям вести учет рабочего времени, затраченного на выполнение каждого задания. http://www.cyberforum.ru/cpp-beginners/thread993588.html
C++ Иерархия классов для будущей игры
Здравствуйте. До этого писал простенькие игрушки вроде карточных игр, но захотелось написать что то более сложное: аркаду типу марио или рпгшку. Ну для этого уже нужно более продуманую архитектуру. Вот просидел 2 дня с карандашом и листиком, но надумал какое то неефективное и не гибкое решение. В игровом цикле будет связанный список с обьектами, которые полиморфно будут обрабатыватся в главном...
C++ Структуры. Решение кода программы
Пожалуйста, помогите написать код к программе. -Задача- В столовой предлагаются N комплексных обедов из Q блюд. Известна стоимость и калорийность каждого блюда. Сколько стоит самый дешевый и самый дорогой обед? Сколько калорий включает в себя самое калорийное блюдо? -Мое предположение, как нужно решить задачу на С++ В консоли программа должна выводить следующие строки, а пользователь с...
C++ На что программа?точнее какие у нее условия? http://www.cyberforum.ru/cpp-beginners/thread993561.html
#include <iostream> #include <cmath> using namespace std; float fun (float x) {return sqrt(x)+x;} int main () { setlocale (LC_ALL,"Russian"); float a,b=13, c=21,d;cout<<"a="; cin>>a;
C++ Задача коммивояжёра Написать программу для решения задачи коммивояжёра с помощью алгоритма Литтла. Интерфейс должен позволять вводить количество городов (вершин графа) и значения элементов матрицы расстояний между городами (матрицы смежности). Буду признателен если поможете, алгоритм решения мне ясен а вот на язык я перевести не смогу. подробнее

Показать сообщение отдельно
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
31.10.2013, 16:48     Описать переменную круг, в которой содержатся все дан* ные для построения круга в декартовой системе координат
Полное решение. Изучайте.
Кликните здесь для просмотра всего текста
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
#include<iostream>
#include<cmath>
/**
 *  /Структура вектор
 */
struct vect
{
    double x0;
    double y0;
    vect(): x0(0), y0(0)
    {}
    vect(double x, double y): x0(x), y0(y)
    {}
};
 
/**
 *  /Структура круг
 */
struct krise
{
    vect center;
    double Radius;
    krise(): center(), Radius(0)
    {}
    krise(double x, double y, double R): center(x , y), Radius(R)
    {}
};
 
/**
 *  /Перегрузим операции, что бы легче было работать (аля ООП)
 */
vect operator+ (vect v1, vect v2)
{
    return vect(v1.x0 + v2.x0, v1.y0 + v2.y0);
}
vect operator- (vect v1, vect v2)
{
    return vect(v1.x0 - v2.x0, v1.y0 - v2.y0);
}
vect operator/ (vect v1, int number)
{
    return vect(v1.x0 / number, v1.y0 / number);
}
vect operator* (vect v1, double number)
{
    return vect(v1.x0 * number, v1.y0 * number);
}
 
/**
 *  /Вычисление модуля вектора
 */
float AbsVector(const vect& v);
 
/**
 *  /Функция возвращает огибающий круг
 */
krise Find(const krise&, const krise&);
 
/**
 *  /Функция возвращает верхнюю точку пересечения окружностей
 */
vect PointOne(const krise&, const krise&);
 
/**
 *  /Функция возвращает нижнюю точку пересечения окружностей
 */
vect PointTwo(const krise&, const krise&);
 
int main(int argc, char* argv[])
{
    system("chcp 1251>0");
 
    krise kris1(0, 0, 2);
    krise kris2(1, 0, 2);
    krise kr;
    /**
     *  /Выводим огибающий круг
     */
    kr = Find (kris1, kris2);
    std::cout << "Огибающий круг:";
    std::cout << "(" << kr.center.x0 << ", " << kr.center.y0 << ", " << kr.Radius << ")" << std::endl;
 
    vect peres;
 
    /**
     *  /Выводим точки пересечения
     */
    peres = PointOne(kris1, kris2);
    std::cout << "Первая точка пересечения:";
    std::cout << "(" << peres.x0 << ", " << peres.y0 << ")" << std::endl;
 
    peres = PointTwo(kris1, kris2);
    std::cout << "Вторая точка пересечения:";
    std::cout << "(" << peres.x0 << ", " << peres.y0 << ")" << std::endl;
 
    return 0;
}
krise Find(const krise& kr1, const krise& kr2)
{
    /**
    *  /Если один круг лежит внутри другого возвращаем внешний круг
    */
    if((kr1.Radius + AbsVector(kr1.center - kr2.center)) < kr2.Radius)
        return kr2;
    else if ((kr2.Radius + AbsVector(kr1.center - kr2.center)) < kr1.Radius)
        return kr1;
    /**
    *  /Ищем огибающий круг. Знание линейной алгебры поможет вам понять код
    */
    krise temp;
    temp.Radius = (kr1.Radius + kr2.Radius + AbsVector(kr1.center - kr2.center)) / 2;
    temp.center = (kr1.center + kr2.center) / 2 + vect((kr1.center.x0 - kr2.center.x0) / AbsVector(kr1.center - kr2.center), (kr1.center.y0 - kr2.center.y0) / AbsVector(kr1.center - kr2.center)) * (kr2.Radius - kr1.Radius);
    return temp;
}
float AbsVector(const vect& v)
{
    return sqrt(pow(v.x0, 2) + pow(v.y0, 2));
}
 
vect PointOne(const krise& kr1, const krise& kr2)
{
    double angle1, angle2;
    angle1 = acos((-pow(kr2.Radius, 2.0) + pow(kr1.Radius, 2.0) + pow(AbsVector(kr1.center - kr2.center), 2.0)) / ( 2 * kr1.Radius * AbsVector(kr1.center - kr2.center)));
    angle2 = atan( abs(kr2.Radius - kr1.Radius) / AbsVector(kr1.center - kr2.center));
    vect temp;
    temp.x0 = kr1.center.x0 + kr1.Radius * cos(angle1 + angle2);
    temp.y0 = kr1.center.y0 + kr1.Radius * sin(angle1 + angle2);
    return temp;
}
 
vect PointTwo(const krise& kr1, const krise& kr2)
{
    double angle1, angle2;
    angle1 = acos((-pow(kr2.Radius, 2.0) + pow(kr1.Radius, 2.0) + pow(AbsVector(kr1.center - kr2.center), 2.0)) / ( 2 * kr1.Radius * AbsVector(kr1.center - kr2.center)));
    angle2 = atan( abs(kr2.Radius - kr1.Radius) / AbsVector(kr1.center - kr2.center));
    vect temp;
    temp.x0 = kr1.center.x0 + kr1.Radius * cos(angle2 - angle1);
    temp.y0 = kr1.center.y0 + kr1.Radius * sin(angle2 - angle1);
    return temp;
}
 
Текущее время: 05:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru