Contact Over deze website Colofon
RSS Feeds Web log bouwer Adverteren?
  Sitemap Disclaimer
E-mailadres  
Wachtwoord  

Op 24-01-2015, 09:52
 
Auteur: Marcel
 
  Neem contact op
Aantal keren bekeken: 359
 
 Alle 76 artikelen van Marcel
 
               abonneren   Abonneren

C# Lijn-algoritme: (n) punten tussen twee x-y coordinaten berekenen met een interval van i

Al lang geleden was er Bresenham's lijn-algoritme: Dit algoritme zorgt voor een rechte lijn tussen twee punten. Toen computer graphics "begonnen" was dit 1 van de eerste algoritme's - en vandaag de dag zou je dit nog steeds kunnen gebruiken. Ware het niet dat we al lang een  System.Drawing.2D hebben met natuurlijk zoiets als Graphics.DrawLine(...).

Dus waarom zou je je nog zorgen maken over de manier waarop een lijn ontstaat? Hieronder staan twee toepassingen:

1. Stel dat je een spelletje ontwikkelt, waarbij je in (n) stapjes wilt berekenen hoe je van het ene x/y coördinaat naar het andere komt: Bereken de baan van 1 sprite naar een ander, waarbij (n) de snelheid is van de baan.

2. Je wilt een lijn van objecten tekenen. Kijk maar eens naar de afbeelding in dit artikel: een zwikje sterretjes tussen x1, y1 en x2, y2 met een interval van i.

Onderstaande code geeft een lijstje punten terug tussen twee x-y coordinaten met een gegeven interval. Je mag het zelf verder invullen (oh ervaren ontwikkelaar... )

private List<Point> BresenhamPunten(int x1, int y1, int x2, int y2, int interval)
{
     List<Point> points = new List<Point>();
     int stepX = 0;
     int stepY = 0;
     bool steep = false;
     int dx = Math.Abs(x2 - x1);
     if (x2 - x1 > 0)
         stepX = 1;
     else
         stepX = -1;
     int dy = Math.Abs(y2 - y1);
     if (y2 - y1 > 0)
         stepY = 1;
     else
         stepY = -1;
     if (dy > dx)
     {
         steep = true;
         int t = x1; x1 = y1; y1 = t;
         t = dx; dx = dy; dy = t;
         t = stepX; stepX = stepY; stepY = t;
     }
     int delta = (dy * 2) - dx;
     int i = 0;
     for (int c = 0; c < dx - 1; c++)
     {
         if (steep)
         {
             if (i % interval == 0)
             {
                 points.Add(new Point(y1, x1));
             }
         }
         else
         {
             if (i % interval == 0)
             {
                 points.Add(new Point(x1, y1));
             }
         }
         while (delta >= 0)
         {
             y1 += stepY;
             delta -= (dx * 2);
         }
         x1 += stepX;
         delta += (dy * 2);
         i++;
     }
     points.Add(new Point(x2, y2));
     return points;
}

Zie ook http://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm

Ik houd me aanbevolen voor (nog) een beter alternatief


terug naar top Terug naar Top doorsturen Doorsturen reageer Reageren

Reacties

abonneren 

  5 Abonnees
abonneren 

  285 Abonnees

abonneren 

  11016 Abonnees


jozias 24-01-2015, 10:07
Dat was precies wat ik nodig had voor mijn simpele game!
 

Laat hier een reactie achter (e-mailadres is niet verplicht).
Een plaatje meesturen mag: .bmp, .gif, .jpg of .png.


Naam E-mailadres niet verplicht.
Reactie



Typ het gekleurde woord over en klik op [Versturen].


 
Rubrieken  
Laatste nieuws 5 
Software Development 37 
Games Corner  
Vraag en Aanbod ICT  
Skills uitwisselen 1 
Lekker zeuren 2 
Nieuwe gadgets 5 
Favoriete YouTubes 28 
Digitale ergernissen 8 
Feeds van de dag 1 
Technische geintjes 10 
Old Skool - 386 & BBS 2 
Meer>>
Nieuwe auteurs
Kevin Favaro
0 artikelen
De meiden
1 artikel
Koko Subratsingh
0 artikelen
Jocus de Velde
0 artikelen
Sophie Testeringen
6 artikelen
Harold Verhage
0 artikelen
FunnyGuy
0 artikelen
WebDevelop7
0 artikelen
Hartje32<3
0 artikelen
Meer>>
 
Nieuwe artikelen
24-01-2015, 09:52
18-08-2014, 23:48
13-08-2014, 22:17
17-07-2014, 22:25
18-05-2014, 22:20
30-04-2014, 13:52
23-04-2014, 23:22
Meer>>
Meest bekeken
22-09-2013, 21:38
18-08-2014, 23:48
16-04-2014, 09:47
18-05-2014, 22:20
10-03-2014, 20:45
04-05-2013, 22:45
17-04-2012, 22:00
Meer>>
Verder op deze site  
Downloads 8 
Web log van de bouwer 4 
Over deze website 8 
Stats  
Bezoekers vandaag: 116
Artikelen: 127
Rubrieken: 19
Auteurs: 24
Overig
Admin Login
Credits Website
rss RSS alle artikelen
Links
Twitter
Youtube - MijnRaad.nl
Feedback
Wat vind je van deze site?
Mis je een rubriek? Laat het ons weten!