Avatar billede sf Nybegynder
28. januar 2005 - 21:34 Der er 6 kommentarer og
1 løsning

kender start og slut punkt skal finde en ligning

jeg kender start x og y.. og slut x og y og arbejde nu paa at tegne en linje mellem de 2 punkter men den laver nogle underlige kurver..!? HjAElp

void man::move(int mousex, int mousey)
{
    int a,x,y,b,mx,my;
    a=(manx-mousx)/(many-mousey);
    //y=ax+b
    y=many
    xm=manx 
      //y=a*mx+b;
    b=y/mx-a;

  int mancamx;
  int mancamy;
  int many2;
  x=1;

  while(many!= mousey && manx!= mousex)
   
   
    y=0;

    {
   
    y=a*x+b;
    cout << "x is " << manx <<  endl;
      cout << "y is " << many <<  endl;

      int Intx = (int)x;
      int Inty = (int)y;
      putpixel(buffer,Intx,Inty,255);
      blit(buffer,screen,0,0,0,0,800,600);
      rest(6);
      x++;
      }
}
Avatar billede bertelbrander Novice
29. januar 2005 - 01:25 #1
Et af problemerne er at du regner i heltal, så hvis ikke dine afstande er meget store vil opløsningen være meget grov og/eller du rammer ved siden af målet.

Jeg prøvede at skruge en funktion sammen, det kan sikket laves smartere:
void Move(int mousex, int mousey)
{
  HDC dc = GetDC(MainWindow);
  if(abs(manx - mousex) > abs(many - mousey))
  {
    double y = many;

    double dy = (((double )many - mousey)/((double )manx - mousex));
    int x;
    if(manx < mousex)
    {
        for(x = manx; x < mousex; x++)
        {
          SetPixel(dc, x, (int )y, RGB(0, 0, 255));
          y += dy;
        }
    }
    else
    {
        for(x = manx; x > mousex; x--)
        {
          SetPixel(dc, x, (int )y, RGB(0, 0, 255));
          y -= dy;
        }
    }
  }
  else
  {
    double x = manx;
    double dx = (((double )many - mousey)/((double )manx - mousex));
    int y;
    if(many < mousey)
    {
        for(y = many; y < mousey; y++)
        {
          SetPixel(dc, (int )x, y, RGB(0, 0, 255));
          x += dx;
        }
    }
    else
    {
        for(y = many; y > mousey; y--)
        {
          SetPixel(dc, (int )x, y, RGB(0, 0, 255));
          x -= dx;
        }
    }
  }
  ReleaseDC(MainWindow, dc);
}
Avatar billede sf Nybegynder
02. februar 2005 - 13:59 #2
min many og manx er float kan man godt nok ikke lige se her..
Avatar billede bertelbrander Novice
02. februar 2005 - 20:06 #3
Det hjælper ikke så meget da a, b, x, y er int's
Avatar billede plx Nybegynder
02. februar 2005 - 20:11 #4
hvis du googler 'bresenham line algorithm' får du en yderst fancy algoritme til at tegne rette linier
Avatar billede sf Nybegynder
03. februar 2005 - 16:14 #5
jo for naar jeg skal tegne det skal det vAEre en integer..
Avatar billede bertelbrander Novice
03. februar 2005 - 17:44 #6
Du bør bruge double til beregninger og konvertere til int når du tegner (evt blot ved en cast).
Avatar billede sf Nybegynder
29. november 2005 - 15:38 #7
lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester