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

Треугольник - C++

Восстановить пароль Регистрация
 
ds102061
 Аватар для ds102061
2 / 2 / 2
Регистрация: 13.10.2010
Сообщений: 144
29.05.2013, 19:05     Треугольник #1
имеется класс: Треугольник даны его координаты вершин (координаты точек)
выполнить операции: 1) расчет площади, периметра;
2) расчет длины медианы, принадлежащей любой стороне;
3) определение значений углов;
4) перемещение в направлении одной из осей;
5) поворот вокруг центра тяжести треугольника.
первые три пункта сделала, а как остальные 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
93
94
95
96
97
98
99
100
// лаб5.cpp : main project file.
 
#include "stdafx.h"
#include <iostream>
#include <cmath>
#include <conio.h>
 
using namespace std;
const double Pi=3.14159265359;
 
class Triangle
{private:
    double x1, y1, x2, y2, x3, y3;
 
public:
   
    Triangle();
    explicit Triangle( double, double, double, double, double, double );
    ~Triangle() {}
    double square() const;
    double perimeter() const;
    double mediana() const;
    double alfa() const;
    double betta() const;
    double gamma() const;
    double per() const;
    static double length ( double, double, double, double );
    friend std::ostream& operator << ( std::ostream&, const Triangle& );
 
};
 
Triangle::Triangle()
{
    x1 = y1 = 1.;
    x2 = 2.; 
    y2 = x3 = 5;
    y3 = 3.;
}
 
Triangle::Triangle( double _x1, double _y1, double _x2, double _y2, double _x3, double _y3 )
{
    x1 = _x1;
    y1 = _y1;
    x2 = _x2;
    y2 = _y2;
    x3 = _x3;
    y3 = _y3;
}
 
double Triangle::length( double x1, double y1, double x2, double y2 )
{
    return sqrt( (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2) );
}
 
double Triangle::perimeter() const 
{
    return length(x1, y1, x2, y2) + length(x1, y1, x3, y3) + length(x2, y2, x3, y3);
}
 
double Triangle::square() const
{
    return fabs( x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2) ) / 2.;
}
double Triangle::mediana() const
{
    return sqrt( 2*(length(x2,y2, x3, y3)*length(x2,y2, x3, y3)) +2*(length(x1, y1, x3, y3)*length(x1, y1, x3, y3))-(length(x1, y1, x2, y2)*length(x1, y1, x2, y2)))/2.;
}
 
double Triangle::alfa() const
{
    return (180/Pi)*acos((length(x2,y2, x3, y3)*length(x2,y2, x3, y3)+length(x1, y1, x3, y3)*length(x1, y1, x3, y3)-length(x1, y1, x2, y2)*length(x1, y1, x2, y2))/(2*length(x2,y2, x3, y3)*length(x1, y1, x3, y3)));
}
double Triangle::betta() const
{
    return (180/Pi)*acos((length(x1, y1, x2, y2)*length(x1, y1, x2, y2)+length(x1, y1, x3, y3)*length(x1, y1, x3, y3)-length(x2,y2, x3, y3)*length(x2,y2, x3, y3))/(2*length(x2,y2, x1, y1)*length(x1, y1, x3, y3)));
}
double Triangle::gamma() const
{
    return (180/Pi)*acos((length(x1, y1, x2, y2)*length(x1, y1, x2, y2)+length(x2, y2, x3, y3)*length(x2, y2, x3, y3)-length(x1,y1, x3, y3)*length(x1,y1, x3, y3))/(2*length(x2,y2, x1, y1)*length(x2, y2, x3, y3)));
}
std::ostream& operator << ( std::ostream& stream, const Triangle& t )
{
    stream << '(' << t.x1 << ';' << t.y1 << "), "
           << '(' << t.x2 << ';' << t.y2 << "), "
           << '(' << t.x3 << ';' << t.y3 << ')' ;
    
    return stream;
}
int main()
{   setlocale(0, "");
    Triangle t;
    cout << "Координаты вершин треугольника: " << t << endl;
    cout << "Площадь: " << t.square() << endl;
    cout << "Периметр: " << t.perimeter() << endl;
    cout << "Медиана: " << t.mediana() << endl;
    cout << "Угол альфа: " << t.alfa() << endl;
    cout << "Угол бетта: " << t.betta() << endl;
    cout << "Угол гамма: " << t.gamma() << endl;
    getch();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.05.2013, 19:05     Треугольник
Посмотрите здесь:

Треугольник C++
Треугольник) C++
Треугольник C++
треугольник C++
C++ Треугольник
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
TankMr
1 / 1 / 0
Регистрация: 13.05.2013
Сообщений: 30
29.05.2013, 19:25     Треугольник #2
4 - Дан треугольник А(1,2) В(0,0) С(2,0)
следовательно, чтобы переместить его вдоль оси х, координата у не меняется, меняется только х.

Я попробовал, создать цикл для изменения координат.
Гром
 Аватар для Гром
199 / 118 / 10
Регистрация: 20.03.2009
Сообщений: 1,075
Записей в блоге: 15
29.05.2013, 19:44     Треугольник #3
Центр тяжести треугольника - это точка пересечения медиан. Координаты ищутся легко - находим уравнение двух медиан по двум точкам (одна из вершин и середина противоположной стороны-"среднее арифметическое двух других точек")
Ax+By+C=0
A = (y2 - y1)
B = (x1 - x2)
C = -A*x1 - B*y1
Далее находим точку пересечения двух прямых
A1*x + B1*y + C1 = 0
A2*x + B2*y + C2 = 0

A1*A2*x + B1*A2*y + C1*A2 = 0
A1*A2*x + B2*A1*y + C2*A1 = 0

y0 = -(C2*A1 + C1*A2) / (B1*A2 + B2*A1)
x0 = -(B1*y + C1)/A1

Наконец, поворот относительно центра координат на угол a:
x' = x*cos(a) - y*sin(a)
y' = y*cos(a) + x*sin(a)
Нам нужно перенести систему координат так, чтоб центр поворота совместился с началом отсчета, а потом обратно. Потому
x(конечное) = x' + x0
y(конечное) = y' + y0

где
x' = x'' * cos(a) - y'' * sin(a)
y' = x'' * sin(a) + y'' * cos(a)

где в свою очередь
x'' = x - x0
y'' = y - y0
ds102061
 Аватар для ds102061
2 / 2 / 2
Регистрация: 13.10.2010
Сообщений: 144
29.05.2013, 20:42  [ТС]     Треугольник #4
математически я поняла как делается все, а как реализовать программно, для меня проблемно

Добавлено через 36 минут
добавила перемещение, только не получается ничего
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
#include "stdafx.h"
#include <iostream>
#include <cmath>
#include <conio.h>
 
using namespace std;
const double Pi=3.14159265359;
 
class Triangle
{private:
    double x1, y1, x2, y2, x3, y3;
    double xx, yy;
public:
    Triangle();
    explicit Triangle( double, double, double, double, double, double );
    ~Triangle() {}
    double square() const;
    double perimeter() const;
    double mediana() const;
    double alfa() const;
    double betta() const;
    double gamma() const;
    double per();
    static double length ( double, double, double, double );
    friend std::ostream& operator << ( std::ostream&, const Triangle& );
 
};
 
Triangle::Triangle()
{
    cout<<"Введите координаты вершин треугольника:"<<endl;
    cout<<"x1: "; cin>>x1;
    cout<<"y1: "; cin>>y1;
    cout<<"x2: "; cin>>x2;
    cout<<"y2: "; cin>>y2;
    cout<<"x3: "; cin>>x3;
    cout<<"y3: "; cin>>y3;
}
 
Triangle::Triangle( double _x1, double _y1, double _x2, double _y2, double _x3, double _y3 )
{
    x1 = _x1;
    y1 = _y1;
    x2 = _x2;
    y2 = _y2;
    x3 = _x3;
    y3 = _y3;
}
 
double Triangle::length( double x1, double y1, double x2, double y2 )
{
    return sqrt( (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2) );
}
 
double Triangle::perimeter() const 
{
    return length(x1, y1, x2, y2) + length(x1, y1, x3, y3) + length(x2, y2, x3, y3);
}
 
double Triangle::square() const
{
    return fabs( x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2) ) / 2.;
}
double Triangle::mediana() const
{
    return sqrt( 2*(length(x2,y2, x3, y3)*length(x2,y2, x3, y3)) +2*(length(x1, y1, x3, y3)*length(x1, y1, x3, y3))-(length(x1, y1, x2, y2)*length(x1, y1, x2, y2)))/2.;
}
 
double Triangle::alfa() const
{
    return (180/Pi)*acos((length(x2,y2, x3, y3)*length(x2,y2, x3, y3)+length(x1, y1, x3, y3)*length(x1, y1, x3, y3)-length(x1, y1, x2, y2)*length(x1, y1, x2, y2))/(2*length(x2,y2, x3, y3)*length(x1, y1, x3, y3)));
}
double Triangle::betta() const
{
    return (180/Pi)*acos((length(x1, y1, x2, y2)*length(x1, y1, x2, y2)+length(x1, y1, x3, y3)*length(x1, y1, x3, y3)-length(x2,y2, x3, y3)*length(x2,y2, x3, y3))/(2*length(x2,y2, x1, y1)*length(x1, y1, x3, y3)));
}
double Triangle::gamma() const
{
    return (180/Pi)*acos((length(x1, y1, x2, y2)*length(x1, y1, x2, y2)+length(x2, y2, x3, y3)*length(x2, y2, x3, y3)-length(x1,y1, x3, y3)*length(x1,y1, x3, y3))/(2*length(x2,y2, x1, y1)*length(x2, y2, x3, y3)));
}
double Triangle::per() 
{
    cout<<"На сколько переместить треугольник?"<<endl;
    cout<<"По оси Х"; cin>>xx;
    cout<<"По оси У"; cin>>yy;
    x1=x1+xx; x2=x2+xx; x3=x3+xx;
    y1=y1+yy; y2=y2+yy; y3=y3+yy;
    return 1;
}
std::ostream& operator << ( std::ostream& stream, const Triangle& t )
{
    stream << '(' << t.x1 << ';' << t.y1 << "), "
           << '(' << t.x2 << ';' << t.y2 << "), "
           << '(' << t.x3 << ';' << t.y3 << ')' ;
    
    return stream;
}
int main()
{   setlocale(0, "");
    Triangle t;
    cout << "Координаты вершин треугольника: " << t << endl;
    cout << "Площадь: " << t.square() << endl;
    cout << "Периметр: " << t.perimeter() << endl;
    cout << "Медиана: " << t.mediana() << endl;
    cout << "Угол альфа: " << t.alfa() << endl;
    cout << "Угол бетта: " << t.betta() << endl;
    cout << "Угол гамма: " << t.gamma() << endl;
    _getch();
}
Yandex
Объявления
29.05.2013, 20:42     Треугольник
Ответ Создать тему
Опции темы

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