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

Маштаб треугольника - C++

Восстановить пароль Регистрация
 
Desking
0 / 0 / 0
Регистрация: 01.03.2016
Сообщений: 74
09.11.2016, 12:15     Маштаб треугольника #1
У меня создается треугольник(Triangle) на основе линий, а линии(Line) на основе точек(Point)
Код Point.h
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
//
// Created by User on 31.10.2016.
//
 
#ifndef PROST_POINT_H
#define PROST_POINT_H
 
 
class Point {
public:
    Point(int x, int y);
 
    void draw();
    void expand(int a);
 
 
    void move(int dx, int dy);
 
    int x() const;
 
    int y() const;
 
 
private:
    int _x;
    int _y;
 
};
 
 
#endif //UNTITLED23_POINT_H
Point.cpp
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
#include "Point.h"
#include <iostream>
 
using namespace std;
 
Point::Point(int x, int y) {
 
    _x = x;
    _y = y;
 
}
 
void Point::draw() {
    cout << "x=" << _x  << " ,y=" << _y << endl;
 
}
 
void Point::move(int dx, int dy) {
 
    _x *= dx;
    _y *= dy;
 
}
void Point::expand(int a){
   _x*=a;
    _y*a;
 
}
 
int Point::x() const {
    return _x;
}
 
int Point::y() const {
    return _y;
}
Line.h
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
#ifndef PROST_LINE_H
#define PROST_LINE_H
 
 
#include "Point.h"
 
class Line {
public:
    Line(Point *p1, Point *p2);
 
    void draw();
    void move(int dx, int dy);
    void expand(int a);
    double lenght();
    void printLenght();
 
    Point *p1(){return _p1;}
    Point *p2(){return _p2;}
 
 
 
private:
    Point *_p1;
    Point *_p2;
 
};
 
 
#endif //UNTITLED23_LINE_H
Line.cpp
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
//
// Created by User on 31.10.2016.
//
 
#include "Line.h"
 
#include <iostream>
#include <math.h>
 
using namespace std;
 
Line::Line(Point *p1, Point *p2) {
 
    _p1 = p1;
    _p2 = p2;
 
}
void Line::expand(int a){
    _p1->expand(a);
    _p2->expand(a);
 
}
void Line::draw() {
 
    _p1->draw();
    _p2->draw();
}
 
void Line::move(int dx, int dy) {
    _p1->move(dx, dy);
 
    _p2->move(dx, dy);
 
}
 
double Line::lenght() {
    double lenght;
    int x1 = _p1->x();
    int x2 = _p2->x();
    int y1 = _p1->y();
    int y2 = _p2->y();
   lenght = sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
 
    return lenght;
}
 
void Line::printLenght(){
    cout << "Lenght line= " << lenght() << endl;
}
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
Triangle.h//
// Created by User on 01.11.2016.
//
 
#ifndef PROST_TRIANGLE_H
#define PROST_TRIANGLE_H
 
 
#include <math.h>
#include "Line.h"
 
class Triangle {
public:
    Triangle(Line *line1, Line *line2);
    void expand(int a);
    double perimeter();
    double area();
    void printCalculated();
 
 
private:
    Line *_line1;
    Line *_line2;
    Line *_line3;
};
Triangle.cpp
#include <iostream>
#include "Triangle.h"
#include "Line.h"
#include "Point.h"
 
 
using namespace std;
 
Triangle::Triangle(Line *line1, Line *line2) {
    _line1 = line1;
    _line2 = line2;
    _line3 = new Line(_line1->p2(), _line2->p2());
 
}
void Triangle::expand(int a) {
 
    _line1->expand(a);
    _line2->expand(a);
 
 
 
 
}
double Triangle::perimeter() {
    cout<<_line1->lenght()<<endl;
    cout<<_line2->lenght()<<endl;
    cout<<_line3->lenght();
    return _line1->lenght() + _line2->lenght() + _line3->lenght();
}
 
double Triangle::area() {
 
}
 
void Triangle::printCalculated(){
    cout << "Perimeter = " <<perimeter() << endl;
    cout << "Area = " << area() << endl;
}
 
 
 
 
 
 
#endif //UNTITLED23_TRIANGLE_H
main.cpp
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
#include "Point.h"
#include "Line.h"
#include "Triangle.h"
 
 
 
int main() {
    Point p1(3, 0);
    Point p2(3, 3);
    Point p3(-1, 0);
 
 
    Line line1(&p1, &p2);
     line1.printLenght();
    Line line2(&p1, &p3);
 
 
    Triangle tr(&line1, &line2);
    tr.expand(2);
    tr.printCalculated();
    line1.printLenght();
 
 
    
 
    return 0;
}
У меня создана функция которая масштабирует треугольник, но она работает не правильно( Помогите пожалуйста
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.11.2016, 12:15     Маштаб треугольника
Посмотрите здесь:

C++ периметр треугольника
C++ Площадь треугольника!
Написать программу, которая считывает длины сторон треугольника, проверяет возможность построения треугольника и находит все медианы этого треуголника C++
C++ c++ Площадь треугольника
матрица разделена диагоналями на 4 треугольника, элементы верхнего и нижнего треугольника нулевые C++
С клавиатуры вводятся три числа, считая их сторонами треугольника найти углы этого треугольника C++
Зная площадь прямоугольного треугольника и угол при основании, найти все стороны треугольника C++
Известна гипотенуза С и противолежащий угол B прямоугольного треугольника. Найти периметр треугольника C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
AlexVRud
414 / 143 / 36
Регистрация: 04.07.2014
Сообщений: 415
09.11.2016, 12:32     Маштаб треугольника #2
Desking, Ты дважды изменяешь одну из точек (p1), т.к. она присудствует в обоих линиях.
Создавай треугольник на основе трёх точек. Тогда уже сам треугольник сможет создавать рёбра (поменяй линию на ребро или отрезок для большего соответствия общепринятой терминологии).
Если ты будешь хранить ссылки на точки в треугольнике, то будет проще проводить манипуляции.
Так же стоит хранить точки в массиве и завести функцию для преобразования (масштабирования) всех точек.
Почитай про Матрицу перехода.
Desking
0 / 0 / 0
Регистрация: 01.03.2016
Сообщений: 74
09.11.2016, 21:38  [ТС]     Маштаб треугольника #3
В Point.cpp на 26 строке нужно _y*=x, просто не правильно написал, но результат тотже

Добавлено через 1 минуту
А можете помочь?

Добавлено через 8 часов 55 минут
Кто поможет?

Добавлено через 8 минут
Предложите свое решение, этой проблемы, мне нужно именно через линии
Yandex
Объявления
09.11.2016, 21:38     Маштаб треугольника
Ответ Создать тему
Опции темы

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