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

Странная проблема с вычислением - C++

Восстановить пароль Регистрация
 
Bacaramba
 Аватар для Bacaramba
0 / 0 / 0
Регистрация: 04.05.2012
Сообщений: 48
04.05.2012, 15:01     Странная проблема с вычислением #1
В конце программы, в цикле, в мейне:
sX2[0] и sY2[0] становятся равными sX1[0] и sY1[0], из за того, что sR равно 0, а оно равно 0 из-за sW и sH. Почему они (sW, sH) равны 0 не понятно. Конечно, они равны 0, если sX2[0] и sY2[0] равно sX1[0] и sY1[0], но я только что написал, почему из моих соображений этого не может быть.

Проблема: sW == 0 и sH == 0.

Если хотите вникнуть в программу:
Суть программы: есть линия, и она вертится вокруг одной точки (1го конца) от движения мыши. (считается все через cos a, sin a: sX2[0] = sR * cos a + sX1[0]; sY2[0] = sR * sin a + sY1[0])
http://savepic.su/1888360.jpg

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
#include <mylib/sg.h>
#include <math.h>
 
void drawLine (int x, int y, int a, int b)
{
    MoveToEx(SGWndDC, x, y, 0);
    LineTo(SGWndDC, a, b);
}
 
void drawRectangle (int x, int y, int a, int b)
{
    Rectangle(SGWndDC, x, y, a, b);
}
 
void drawCircle(int x, int y, int a)
{
    Ellipse(SGWndDC, x - a, y - a, x + a, y + a);
}
 
void selectPen(int a,int r,int g, int b)
{
    if(a == 0)
    {
        sgSelectTool(SGWndDC, CreatePen(PS_NULL, 0, RGB(0, 0, 0)));
    }
    else
    {
        sgSelectTool(SGWndDC, CreatePen(PS_SOLID, a, RGB(r, g, b)));
    }
}
 
void selectBrush(int r, int g, int b)
{
    if(r == 256 || g == 256 || b == 256)
    {
        sgSelectTool(SGWndDC, GetStockObject(NULL_BRUSH));
    }
    else
    {
        sgSelectTool(SGWndDC, CreateSolidBrush(RGB(r, g, b)));
    }
}
 
int main()
{
    int a = 0, q = 0;
 
    int mX = sgGetMouseX();
    int mY = sgGetMouseY();
 
    int r = 255, g = 255, b = 255;
 
    int xR = 119 + 24, xG = 119 + 24, xB = 119 + 24;
 
    sgCreateWindow(800, 500);
 
    int sX1[500] = {0};
    int sY1[500] = {0};
    int sX2[500] = {0};
    int sY2[500] = {0};
 
    int sR = 0, mR = 0;
    int sW = 0, mW = 0, sH = 0, mH = 0;
 
    sX1[0] = 300;
    sY1[0] = 200;
    sX2[0] = 400;
    sY2[0] = 100;
 
    while(1 == 1)
    {
        selectBrush(255, 255, 255);
        drawRectangle(-5, -5, 805, 605);
 
        sW = sX2[0] - sX1[0];
        sH = sY2[0] - sY1[0];
        printf("sW = %d | sH = %d \n", sW, sH);
        mW = sgGetMouseX() - sX1[0];
        mH = sgGetMouseY() - sY1[0];
        //printf("mW = %d | mH = %d \n", mW, mH);
        sR = sqrt(sW * sW + sH * sH);
        mR = sqrt(mW * mW + mH * mH);
        //printf("sR = %d | mR = %d \n", sR, mR);
        sX2[0] = sR * (mW / mR) + sX1[0];
        sY2[0] = sR * (mH / mR) + sY1[0];
 
        selectPen(3, 80, 80, 80);
        drawLine(sX1[0], sY1[0], sX2[0], sY2[0]);
 
        Sleep(50);
    }
}
Я понимаю, что я дурак просто, но не могу понять где D:

Добавлено через 3 часа 14 минут
Офигеть. Несколько рас сам посчитал на бумажке. Не понимаю, какого черта не работает.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.05.2012, 15:01     Странная проблема с вычислением
Посмотрите здесь:

Сортировка c вычислением адреса C++
C++ Странная проблема при преобразовании Pascal в C++. Гуру С++, нужна ваша помощь
C++ Странная ошибка
C++ Выполнить сортировку одномерного массива методом вставки в список с вычислением адреса
вычислить сумму членов ряда с использованием рекуррентную формулу,дано натуральное и действительное число с вычислением C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
04.05.2012, 15:12     Странная проблема с вычислением #2
Я не просматривал полностью весь код, но могу предположить, что дело в использовании целочисленных типов для вычислений. Попробуйте использовать double.
Bacaramba
 Аватар для Bacaramba
0 / 0 / 0
Регистрация: 04.05.2012
Сообщений: 48
04.05.2012, 18:02  [ТС]     Странная проблема с вычислением #3
Честно говоря, когда я заменял инты на дубли, представлял как буду отнекиваться и снова просить о помощи. Знаете, заработало. Можете объяснить почему? Просто, как я понимаю, в интах просто идет округление, но не в ноль же. Короче, спасибо, и, если не трудно, объясните почему так получается (при интах 0).
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
04.05.2012, 18:18     Странная проблема с вычислением #4
Я не знаю Ваших значений при вычислениях. Но при целочисленном делении, если делитель больше делимого, то в любом случае будет 0.
Yandex
Объявления
04.05.2012, 18:18     Странная проблема с вычислением
Ответ Создать тему
Опции темы

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