pomoc w zrozumieniu kodu

Odpowiedz Nowy wątek
2019-03-12 02:04
0

Witam majac program rysowania odcinka korzystając z równania kierunkowego prostej y=ax+b mam problem taki, ze nie nie rozumiem niektórych warunkow... mianowicie mając dwie funkcje ktore odpowiadaja za pobieranie punktu wspolrzednych klikniecia myszy:

void MyWindow::mousePressEvent(QMouseEvent *event)
{
    x0 = event->x();
    y0 = event->y();

    x0 -= poczX;
    y0 -= poczY;
}

i odpowiedzialna za pobieranie wspolrzednych puszczenia przycisku myszy

void MyWindow::mouseReleaseEvent(QMouseEvent *event)
{
    x1 = event->x();
    y1 = event->y();

    x1 -= poczX;
    y1 -= poczY;

//rysowanie odcinka
    float a, b;

    a = (float)(y1 - y0)/(x1 -x0);
    b = (float)(y0 - a * x0);
    if(x0 < x1)
    {
        if(abs(a) < 1)
        {
            for(int x = x0; x <=x1; x++)
            {
                int y = a * x + b;
                zapalPiksel(x,y);
            }
        }
        else if(abs(a) >= 1 && y0 < y1 )
        {
            for(int y = y0; y <=y1; y++)
            {
                int x = (y - b)/a;
                zapalPiksel(x,y);
            }
        }
        else
        {
            for(int y = y1; y <=y0; y++)
            {
                int x = (y - b)/a;
                zapalPiksel(x,y);
            }
        }
    }
    else
    {
        if(abs(a) < 1)
        {
            for(int x = x1; x <=x0; x++)
            {
                int y = a * x + b;
                zapalPiksel(x,y);
            }
        }
        else if(abs(a) >= 1 && y1 < y0)
        {
            for(int y = y1; y <=y0; y++)
            {
                int x = (y - b)/a;
                zapalPiksel(x,y);
            }
        }
        else
        {
            for(int y = y0; y <=y1; y++)
            {
                int x = (y - b)/a;
                zapalPiksel(x,y);
            }
        }
    }
}

nie wiem co oznaczaja w kodzie takie warunki jak :

 if(abs(a) < 1)

lub

    else if(abs(a) >= 1 && y0 < y1 )

Bardzo proszę o pomoc w zrozumieniu

edytowany 1x, ostatnio: kq, 2019-03-12 09:15

Pozostało 580 znaków

2019-03-13 01:29
0

zatem jeśli punkt klikniecia wypada x0=2,y0=3
a punkt puszczenia x1=4,y1=1
to jestem w tym warunku

  else if(abs(a) >= 1 && y0 < y1 )
        {
            for(int y = y0; y <=y1; y++)
            {
                int x = (y - b)/a;
                zapalPiksel(x,y);
            }
        }

i rysuje piksele w tym obszarze?
images.png

Pozostało 580 znaków

2019-03-13 11:24
1

Nie! abs(a) >= 1 znaczy, że zakres kątów jest od 45 do 135 stopni.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 1x, ostatnio: MarekR22, 2019-03-13 11:24

Pozostało 580 znaków

2019-03-13 13:56
0

Mhm a ten drugi warunek obok abs(a)>=1 dlaczego musi zostać spełniony?

&& y0 < y1
edytowany 1x, ostatnio: dcielak, 2019-03-13 13:56
dla konta 225-315 y trzeba zmniejszać, nie zwiększać. - MarekR22 2019-03-13 14:17

Pozostało 580 znaków

2019-03-13 14:46
0

A skąd wiadomo takie rzeczy?

z lekcji matematyki w podstawówce/gimnazjum. - MarekR22 2019-03-14 12:28

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 0, botów: 1

Robot: CCBot