Twoje PC  
Zarejestruj się na Twoje PC
TwojePC.pl | PC | Komputery, nowe technologie, recenzje, testy
B O A R D
   » Board
 » Zadaj pytanie
 » Archiwum
 » Szukaj
 » Stylizacja

 
M E N U
  0
 » Nowości
0
 » Archiwum
0
 » Recenzje / Testy
0
 » Board
0
 » Rejestracja
0
0
 
Szukaj @ TwojePC
 

w Newsach i na Boardzie
 
OBECNI NA TPC
 
 » Fl@sh 20:04
 » past 20:01
 » buddookan 19:59
 » Artaa 19:58
 » Markizy 19:55
 » Chavez 19:52
 » NimnuL 19:51
 » rainy 19:43
 » Yooras 19:38
 » jablo 19:37
 » rooter666 19:26
 » DJopek 19:21
 » coobav 19:21
 » KHot 19:20
 » AfiP 19:17
 » slawek198 19:16
 » burz 19:14
 » Dexter 19:13
 » hokr 19:12
 » Sebek 19:12

 Dzisiaj przeczytano
 21162 postów,
 wczoraj 31345

 Szybkie ładowanie
 jest:
wyłączone.

 
ccc
TwojePC.pl © 2001 - 2024
A R C H I W A L N A   W I A D O M O Ś Ć
    

[algorytm] Jak byście napisali algorytm łączenia dwóch punktów na płaszczyźnie? , kubazzz 3/06/09 13:53
Mamy płaszczyznę ograniczoną XY [X=Y], współrzędne od 1 do 100.
Dostajemy współrzędne dwóch punktów początkowego i końcowego i mamy wyznaczyć współrzędne wszystkich punktów łączących najkrótszą drogą punkt początkowy i końcowy. [czyli de facto musi to być odcinek, punkty mogą być po skosie, czyli z (x1,y1) od razu na (x1+1, y1+1) ]

Wydawało mi się to prostsze :)

SM-S908

  1. Byly na to algorytmy , pachura 3/06/09 14:05
    Pamietam na Grafice Komputerowej. Mimo wszystko nie byly takie super-banalne (cos z pochodnymi bylo). Ale jak wiadomo, algorytmy graficzne musza cechowac sie duza wydajnoscia a niekoniecznie dokladnoscia, najlepiej jak dzialaja tylko na liczbach calkowitych i nie uzywaja dzielenia...

    Na poczatku za pomoca lustrzanych odbic/obrotow sprowadz wszystkie przypadki do jednego (kat ostry, idziesz w dol w prawo). Potem w kazdym punkcie musisz sie tylko zastanowic czy Twoja linia bedzie zgodniejsza z idealna jak pojdziesz do punktu (x; y+1), czy do (x+1; y+1).

  2. Wszystkich? Niewykonalne. , Norton 3/06/09 14:18
    Z tego co mi wiadomo to odcinek łączący 2 punkty jest tworem o nieskończenie małej grubości. Z tego wnioskuję że może na niej leżeć nieskończenie wiele punków niezależnie od jej długości.
    Ale ja gupi jestem i mogę się mylić.

    Zmień swój podpis na Boardzie
    maks 100 znaków, 3 linie,
    zabroniony spam oraz reklama

    1. nie nie, chodzi o cos prostszego , kubazzz 3/06/09 14:31
      masz np "szachownice".
      droga miedzy punktem A a B wiedzie przez ilestam pol, przy zalozeniu ze kolejne pole musi sie stykac chociazby wiercholkiem.

      Po prostu jest ograniczony zbior punktow, pikseli.
      Bez aliasingu.

      Zrobiłem coś takiego:

      $punkt_x=array();
      $punkt_y=array();

      $x1 = 1;
      $x2 = 100;
      $y1 = 1;
      $y2 = 100;
      if(isset($_POST['x1']))
      {
      $x1 = $_POST['x1'];
      }
      if(isset($_POST['x2']))
      {
      $x2 = $_POST['x2'];
      }
      if(isset($_POST['y1']))
      {
      $y1 = $_POST['y1'];
      }
      if(isset($_POST['y2']))
      {
      $y2 = $_POST['y2'];
      }
      if (abs($x2-$x1)>abs($y2-$y1))
      {
      if($x2>$x1)
      {
      for ($x=$x1;$x<=$x2;$x++)
      {
      $y=$y1+round(($y2-$y1)*($x-$x1)/($x2-$x1));
      $punkt_x[]=$x;
      $punkt_y[]=$y;
      }
      }
      else
      {
      for ($x=$x2;$x<=$x1;$x++)
      {
      $y=$y2+round(($y1-$y2)*($x-$x2)/($x1-$x2));
      $punkt_x[]=$x;
      $punkt_y[]=$y;
      }
      }
      }
      else
      {
      if($y2>$y1)
      {
      for ($y=$y1;$y<=$y2;$y++)
      {
      $x=$x1+round(($x2-$x1)*($y-$y1)/($y2-$y1));
      $punkt_x[]=$x;
      $punkt_y[]=$y;
      }
      }
      else
      {
      for ($y=$y2;$y<=$y1;$y++)
      {
      $x=$x2+round(($x1-$x2)*($y-$y2)/($y1-$y2));
      $punkt_x[]=$x;
      $punkt_y[]=$y;
      }
      }
      }

      $i = 0;
      foreach($punkt_x as $x)
      {
      echo $x;
      echo ",";
      echo $punkt_y[$i];
      $i++;
      echo "<br/>";
      }


      http://gimeproject.pl/punkty.php

      Coś tutaj się rzuca w oczy co mogłem ominąć?;)

      SM-S908

      1. Za bartkiem_mi , Norton 3/06/09 15:28
        http://www.codecodex.com/...enham's_line_algorithm

        dodatkowo

        <?php

        /****************************************************
        Bresenham Line Algorythm PHP/GD implementation
        ****************************************************/
        function line($im,$x1,$y1,$x2,$y2,$color){

        $deltax=abs($x2-$x1);
        $deltay=abs($y2-$y1);

        if ($deltax>$deltay) {
        $numpixels=$deltax+1;
        $d=(2*$deltay)-$deltax;
        $dinc1=$deltay << 1; $dinc2=($deltay-$deltax) << 1;
        $xinc1=1; $xinc2=1;
        $yinc1=0; $yinc2=1;
        } else {
        $numpixels=$deltay+1;
        $d=(2*$deltax)-$deltay;
        $dinc1=$deltax << 1; $dinc2=($deltax-$deltay)<<1;
        $xinc1=0; $xinc2=1;
        $yinc1=1; $yinc2=1;
        }

        if ($x1>$x2) {
        $xinc1=-$xinc1;
        $xinc2=-$xinc2;
        }

        if ($y1>$y2) {
        $yinc1=-$yinc1;
        $yinc2=-$yinc2;
        }
        $x=$x1;
        $y=$y1;

        for ($i=0;$i<$numpixels;$i++) {
        imagesetpixel($im,$x,$y,$color);
        if ($d<0) {
        $d+=$dinc1;
        $x+=$xinc1;
        $y+=$yinc1;
        } else {
        $d+=$dinc2;
        $x+=$xinc2;
        $y+=$yinc2;
        }
        }
        return ;
        }

        ?>

        Zmień swój podpis na Boardzie
        maks 100 znaków, 3 linie,
        zabroniony spam oraz reklama

  3. hmm , bartek_mi 3/06/09 14:31
    jak to wszystkich?

    staloprzecinkowo? wspolrzedne pikseli?
    to algorytm bresenhama - to sa podstawy...

    dzisiaj jest jutrzejszym wczoraj

  4. ok, dzięki za dotychczasową pomoc wszystkim, ale jest jeszcze jedno "ALE"... , kubazzz 3/06/09 16:03
    muszę to przepisać z PHP na C++ :/
    C prawie nie znam, ale wiem że PHP pochodzi z C i że tylko trochę uproszczeń jest.

    Tutaj mam ostateczną wersję:
    http://gimeproject.pl/punkty.php
    http://gimeproject.pl/punkty.src - źródło w PHP

    Pogrzebałem trochę w jakiś tutorialach i mam coś takiego

    __
    #include <iostream>
    #include <string> // nie wiem co jeszcze muszę includować
    using namespace std;


    int main () // tutaj się zaczyna główny program
    {
    // deklaracja zmiennych
    int x,y,x1,x2,y1,y2;

    int x_min = 1;
    int x_max = 100;
    int y_min = 1;
    int y_max = 100;

    int punkt[2];
    int odcinek []; // nie wiem jak zadeklarować dwuwymiarową tablicę bez określonej z góry długości
    string msg[]; // to samo ze stringami


    // potem przeklejka z tego głównego kodu chyba byłaby prosta, ale nie wiem do końca jaka jest standardowa metoda na wywalanie danych i pobieranie ich od użytkownika


    cout << "Podaj X1: ";
    getline (cin, x1);
    //tak to się robi?

    // i tak naprawdę największy problem - sprawdzanie poprawności tych zmiennych, wg idei w tym source z php, ale wiem że w C++ jest inny rygor, inna tolerancja na błędy, a program się nie może wysypać. Musi sprawdzić czy to jest Intiger (a nie float, albo string), czy mieści się w zakresie.

    return 0;
    }

    Trochę się pokomplikowało jak widać, ale to prawdopodobnie mój pierwszy i ostatni raz z C++ w tym roku.
    Nie pytajcie po co mi to i nie bójcie się, że będę niedouczonym programistą bo nie zamierzam być programistą, w ogóle cała ta sprawa jest pokręcona, ale muszę to zamknąć.

    Z góry dziękuję.

    SM-S908

    1. źródło jest , kubazzz 3/06/09 16:04
      jeszcze http://gimeproject.pl/punkty.txt

      i nie bijcie, przynajmniej się staram i próbuję:D

      SM-S908

  5. temat zamknięty , kubazzz 4/06/09 00:34
    poradziłem sobie :)
    dziękuję za zainteresowanie.

    SM-S908

    
All rights reserved ® Copyright and Design 2001-2024, TwojePC.PL