С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.65/20: Рейтинг темы: голосов - 20, средняя оценка - 4.65
MrLOLS
19 / 19 / 4
Регистрация: 21.11.2010
Сообщений: 73
1

Вращение прямоугольника вокруг оси

30.04.2012, 16:16. Просмотров 3860. Ответов 1
Метки нет (Все метки)

Программа должна вращать прямоугольник с заданными параметрами длины и ширины, вокруг оси.

Общий алгоритм приведен ниже.
Вопрос: как определить точки 2 и 4 исходя из уже имеющихся (1, 3).

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
#include <graphics.h>
#include <cmath>
 
void DrawRectangle(int x0, int y0, int a, int b, double angle, int color)
{
    int x1, y1, x2, y2, x3, y3, x4, y4;
    float d;
    d=sqrt((a*a)+(b*b)); // диагональ прямоугольника
 
    setcolor(color);
 
    x1 = round(x0 - (d/2) * cos(angle * M_PI / 180)); // находим точку x1 делением диагонали
    y1 = round(y0 - (d/2) * sin(angle * M_PI / 180)); // находим точку y1 делением диагонали
    
    x3 = round(x1 + d * cos(angle * M_PI / 180)); // находим точку x3 добавив к x1 диагональ
    y3 = round(y1 + d * sin(angle * M_PI / 180)); // находим точку y3 добавив к y1 диагональ
 
    x2 =?;
    y2 =?;
 
    x4 =?;
    y4 =?;
    
    line(x2, y2, x1, y1); // линия от точки 2 к 1
    line(x2, y2, x3, y3); // линия от точки 2 к 3
 
    line(x4, y4, x1, y1); // линия от точки 4 к 1
    line(x4, y4, x3, y3); // линия от точки 4 к 3
    
    line(x1, y1, x3, y3); // линия от точки 1 к 3 (диагональ)
    circle(x0,y0,2); // точка в центре диагонали
}
 
int main()
{
    initwindow(400, 400);
    int x0=200, y0=200, // центральная точка, вокруг которой идет вращение
    ang=0, // угол
    a=200, // длина прямоугольника
    b=3; // шырина прямоугольника
 
    setcolor(15);
    while(!kbhit())
    {
        DrawRectangle(x0, y0, a, b, ang, 15);
        delay(50);
        DrawRectangle(x0, y0, a, b, ang, 0);
        ang = ang + 2;
    }
}
0
Изображения
 
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.04.2012, 16:16
Ответы с готовыми решениями:

Вращение объекта вокруг оси. Матрицы поворота.
добрый день, нужно сделать программу вращение куба вокруг оси z. Применил...

Вращение окружностей вокруг определенного центра
Всем доброго времени и суток! Как сделать вращающиеся окружности вокруг...

Вращение кубика вокруг начала координат
В общем следующая проблема: кубик должен крутиться вокруг начала координат, но...

Поворот вокруг произвольной оси
Здравствуйте, пытаюсь реализовать функции поворота базиса вокруг произвольной...

Поворот прямоугольника относительно оси
Всем доброго вечера! Встал перед проблемой, задача была такова: Определить факт...

1
MrLOLS
19 / 19 / 4
Регистрация: 21.11.2010
Сообщений: 73
30.04.2012, 19:47  [ТС] 2
Задачу решил, только в C#:
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
    int width, height, stop = 0;
    public Form1()
    {
        InitializeComponent();
        width = pictureBox1.Width;
        height = pictureBox1.Height;
    }
 
    private void pictureBox1_Click(object sender, EventArgs e)
    {
    }
 
    private void button1_Click(object sender, EventArgs e)
    {
        string a1 = textBox1.Text, b1 = textBox2.Text;
        int x1, y1, x2, y2, x3, y3, x4, y4,
            x0 = width / 2, y0 = height / 2, // центральна точка, навколо котрої ідуть оберти
            a = System.Convert.ToInt32(a1), // сторона 1
            b = System.Convert.ToInt32(b1); // сторона 2
 
        double beta = Math.Atan(b / a),
               d = Math.Sqrt((a * a) + (b * b)), // діагональ прямокутника
               alpha = 0;
 
        for (int i = 0; i < 60; i++)
        {
            x1 = x0 + (int)Math.Round(d * Math.Cos(alpha + (Math.PI - beta)) / 2);
            y1 = y0 + (int)Math.Round(d * Math.Sin(alpha + (Math.PI - beta)) / 2);
            x2 = x0 + (int)Math.Round(d * Math.Cos(alpha + beta) / 2);
            y2 = y0 + (int)Math.Round(d * Math.Sin(alpha + beta) / 2);
            x3 = x0 + (int)Math.Round(d * Math.Cos(alpha - beta) / 2);
            y3 = y0 + (int)Math.Round(d * Math.Sin(alpha - beta) / 2);
            x4 = x0 + (int)Math.Round(d * Math.Cos(alpha - (Math.PI - beta)) / 2);
            y4 = y0 + (int)Math.Round(d * Math.Sin(alpha - (Math.PI - beta)) / 2);
 
            Graphics g = pictureBox1.CreateGraphics();
            Pen myPen = new Pen(Color.Black, 3);
 
            g.DrawLine(myPen, x1, y1, x2, y2);
            g.DrawLine(myPen, x2, y2, x3, y3);
            g.DrawLine(myPen, x3, y3, x4, y4);
            g.DrawLine(myPen, x4, y4, x1, y1);
 
            System.Threading.Thread.Sleep(50);
            g.Clear(Color.White);
 
            alpha = alpha + 0.1;
 
            myPen.Dispose();
        }
    }
 
    private void button2_Click(object sender, EventArgs e)
    {
 
    }
 
    private void label1_Click(object sender, EventArgs e)
    {
 
    }
 
    private void Form1_Load(object sender, EventArgs e)
    {
 
    }
}
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.04.2012, 19:47

Нарисовать треугольник, вращающийся вокруг своей оси
Помогите ! Нужно нарисовать равносторонний треугольник и сделать так, чтобы он...

Вращательное движение абсолютно твердого тела вокруг неподвижной оси
Здравствуйте, помогите, пожалуйста, написать код. Нужно описать движение...

Как сделать, чтобы задаваемый текст вращался вокруг своей оси, изменяя цвет?
С графикой увы не работали, но нужно сдать любую работу по графике в C++....


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

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

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