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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.74
MrLOLS
 Аватар для MrLOLS
13 / 13 / 1
Регистрация: 21.11.2010
Сообщений: 63
30.04.2012, 16:16     Вращение прямоугольника вокруг оси #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;
    }
}
Изображения
 
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.04.2012, 16:16     Вращение прямоугольника вокруг оси
Посмотрите здесь:

C++ вращение отрезка.
Осуществить "вращение" квадрата вокруг его центра C++
вращение фигуры C++
C++ Вращение объекта вокруг оси. Матрицы поворота.
C++ Вращение окружностей вокруг определенного центра
Вращение кубика вокруг начала координат C++
C++ Поворот вокруг произвольной оси
C++ Нарисовать треугольник, вращающийся вокруг своей оси

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrLOLS
 Аватар для MrLOLS
13 / 13 / 1
Регистрация: 21.11.2010
Сообщений: 63
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)
    {
 
    }
}
}
Yandex
Объявления
30.04.2012, 19:47     Вращение прямоугольника вокруг оси
Ответ Создать тему
Опции темы

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