0 / 0 / 0
Регистрация: 20.10.2011
Сообщений: 3
1

Вращающийся многоугольник неправильно определяет, в какую сторону ему надо вращаться

20.10.2011, 22:49. Показов 629. Ответов 0
Метки нет (Все метки)

вот какая проблема возникла..с помощью диалога мы задаем параметры для нашего многоугольника,в том числе и направление вращения (по часовой стрелке или против часовой).Задал с помощью CheckBox. Если галку ставим,то вращается по часовой,если не ставим-то против.это по сути.а на деле-как-то не охотно это дело выполняется. то бишь по непонятным мне причинам,многоугольник может вращаться по часовой,когда,к примеру, задал,чтобы против часовой вращался. ПОжалуйста,кому не сложно,посмотрите,в чем моя ошибка=)параметр "к" как раз и характеризует направление.
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
// PMDialog.cpp : implementation file
//PMDialog.cpp
 
#include "stdafx.h"
#include "PM.h"
#include "PMDialog.h"
 
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
 
/////////////////////////////////////////////////////////////////////////////
// CPMDialog dialog
 
 
CPMDialog::CPMDialog(CWnd* pParent /*=NULL*/)
    : CDialog(CPMDialog::IDD, pParent)
{
    //{{AFX_DATA_INIT(CPMDialog)
    m_ANGLE = 0;
    m_SPEED = 0;
    //}}AFX_DATA_INIT
dir = true;
}
 
 
void CPMDialog::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(CPMDialog)
    DDX_Text(pDX, IDC_EDIT1, m_ANGLE);
    DDX_Text(pDX, IDC_EDIT2, m_SPEED);
    //}}AFX_DATA_MAP
}
 
 
BEGIN_MESSAGE_MAP(CPMDialog, CDialog)
    //{{AFX_MSG_MAP(CPMDialog)
        // NOTE: the ClassWizard will add message map macros here
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()
 
/////////////////////////////////////////////////////////////////////////////
// CPMDialog message handlers
BOOL CPMDialog::OnInitDialog() 
{
    CDialog::OnInitDialog();
VERIFY(buttonDir.SubclassDlgItem(IDC_CHECK_DIR, this));
// инициализирую направление
    if(dir==true)
        buttonDir.SetCheck(1);// TODO: Add extra initialization here
    if(dir==false)
        buttonDir.SetCheck(0);
 
    return TRUE;  // return TRUE unless you set the focus to a control
                  // EXCEPTION: OCX Property Pages should return FALSE
}
void CPMDialog::OnOK() 
{
 
    // получаю направление
    dir = buttonDir.GetCheck();// TODO: Add extra validation here
    
    CDialog::OnOK();
}
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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
// PMView.cpp : implementation of the CPMView class
//
 
#include "stdafx.h"
#include "PM.h"
#include "MATH.h"
#include "PMDoc.h"
#include "PMView.h"
#include "PMDialog.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
 
/////////////////////////////////////////////////////////////////////////////
// CPMView
 
IMPLEMENT_DYNCREATE(CPMView, CView)
 
BEGIN_MESSAGE_MAP(CPMView, CView)
ON_WM_TIMER()
ON_COMMAND(ID_BUTTON1, OnAppPM)
    //{{AFX_MSG_MAP(CPMView)
        // NOTE - the ClassWizard will add and remove mapping macros here.
        //    DO NOT EDIT what you see in these blocks of generated code!
    //}}AFX_MSG_MAP
    // Standard printing commands
    ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
    ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
    ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
 
END_MESSAGE_MAP()
 
/////////////////////////////////////////////////////////////////////////////
// CPMView construction/destruction
 
CPMView::CPMView()
{
    // TODO: add construction code here
 
angle=0.0;
 
}
 
CPMView::~CPMView()
{
}
 
BOOL CPMView::PreCreateWindow(CREATESTRUCT& cs)
{
    // TODO: Modify the Window class or styles here by modifying
    //  the CREATESTRUCT cs
 
    return CView::PreCreateWindow(cs);
}
 
/////////////////////////////////////////////////////////////////////////////
// CPMView drawing
 
void CPMView::OnDraw(CDC* pDC)
{
    CPMDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    double x;
    double y;
    double x0;
    double y0;
    double x1;
    double y1;
    double x2;
    double y2;
    SetTimer(1,100,NULL);
    CRect rect;
    GetClientRect( &rect);
    rect.Height();
    x0=rect.Width()/2;
    y0=rect.Height()/2;
    double r=min(x0,y0);
    double p =2*asin(1.0);
    for (int i=0;i<n;i++)
    {
        x1=x0+r*cos((2*p*i/n)+angle);
        y1=y0-r*sin((2*p*i/n)+angle);
        x2=x0+r*cos((2*p*(i+1)/n)+angle);
        y2=y0-r*sin((2*p*(i+1)/n)+angle);
        pDC->MoveTo(x1,y1);
        pDC->LineTo(x2,y2);
 
    }
    // TODO: add draw code for native data here
}
 
/////////////////////////////////////////////////////////////////////////////
// CPMView printing
 
BOOL CPMView::OnPreparePrinting(CPrintInfo* pInfo)
{
    // default preparation
    return DoPreparePrinting(pInfo);
}
 
void CPMView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
    // TODO: add extra initialization before printing
}
 
void CPMView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
    // TODO: add cleanup after printing
}
 
/////////////////////////////////////////////////////////////////////////////
// CPMView diagnostics
 
#ifdef _DEBUG
void CPMView::AssertValid() const
{
    CView::AssertValid();
}
 
void CPMView::Dump(CDumpContext& dc) const
{
    CView::Dump(dc);
}
 
CPMDoc* CPMView::GetDocument() // non-debug version is inline
{
    ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CPMDoc)));
    return (CPMDoc*)m_pDocument;
}
#endif //_DEBUG
 
/////////////////////////////////////////////////////////////////////////////
// CPMView message handlers
void CPMView::OnAppPM() 
{
    CPMDialog cDlg(this);
    
        
        cDlg.dir=k ;
        
if(cDlg.dir==true)
//cDlg.dir==true;
k=1;
if(cDlg.dir==false)
//cDlg.dir=false;
k=-1;
    if (cDlg.DoModal()==IDOK)
        
    {
            n=cDlg.m_ANGLE;
            j=cDlg.m_SPEED;
            k = cDlg.dir;
            if(cDlg.dir==true)
            k = 1;
        else
            k = -1;     
    }   
}
void CPMView::OnTimer(UINT nIDEvent)
{
    angle=angle+1*k*j;
        CView::OnTimer(nIDEvent);
    Invalidate();
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.10.2011, 22:49
Ответы с готовыми решениями:

Какую ссылку ему надо и как с этим бороться?
int main () { return 0; }, student@aud16-9:~/prog$ gcc -o prog prog.cpp...

На вращающийся диск падает обруч. С какой скоростью будет вращаться система тел?
Доброго времени суток! Подскажите пожалуйста с задачей: Горизонтально расположенный диск...

Как заставить кулер вращаться в другую сторону ?
Как это можно сделать , только пожалуйста не спрашивайте зачем ( сам недопонимаю, но надо сделать )...

Нарисовать вращающийся многоугольник с n вершинами, расположенными на окружности радиусом r
Добрый день всем! Задание таково: написать программу, в которой пользователь вводит значения n и r,...

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.10.2011, 22:49

В какую сторону двигаться?
Есть такое задание:...

Какую сторону выбрать?
У меня на компе стоит ubuntu и винда. Под линукс я немного пишу на питоне, а под винду на c#. Вот...

Какую сторону выбрать?
У меня на компе стоит ubuntu и винда. Под линукс я немного пишу на питоне, а под винду на c#. Вот...

Поворот - в какую сторону быстрей ?
Формула нужна ребят. float Dir = 30.f; float newDir = 250.f; //Мне нужно плавно повернуть -...

В какую сторону вращается тело
Твёрдое тело вращается вокруг неподвижной оси по закону φ = at – bt3, где a = 6 рад/с, b = 2...

Подскажите в какую сторону читать
Добрый вечер , подскажите какую литературу читать и какие уроки может есть где показан пример...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru