?
Solved

Fastest Bresenham algorithm

Posted on 2002-03-13
4
Medium Priority
?
1,203 Views
Last Modified: 2008-02-01
Hi Experts,

I've read one in a book, there is the most fastest line algorithm founded by two university guys, I don't remember the name but their algorithm is based on improved Bresenham.

So please can someone create a line function which I can simply use based on that fastest improved Bresenham ?

for example a function like this :

function Line(x1, y1, x2, y2: integer)

So I can simply use that on my program thanks alot experts... you are all always great on helping student like me :)
0
Comment
Question by:comicboy
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
4 Comments
 
LVL 11

Expert Comment

by:robert_marquardt
ID: 6860615
I searched on Google with "improved Bresenham2 and found this http://www.cs.unc.edu/~davemc/Class/136/Lecture9/Lines.html
The source is in C, but conversion should be easy.
0
 

Accepted Solution

by:
Rabster earned 200 total points
ID: 6860994
A guy called G. Hoffman has adapted a routine from C based on an algorithm from a Kenny Hoff. This is an improved version of Bresenham's algorithm:

Procedure MakeBLine(p0,q0,p1,q1, pal,col : Byte);
var
  x,y,dx,dy,
  adx,ady,
  ix,iy,du,
  dr,pp,cp,
  i : Integer;
Begin
  dx := p1-p0;
  dy := q1-q0;
  adx := Abs(dx);
  ady := Abs(dy);
  x := p0;
  y := q0;
  cp := 0;
  If dx > 0 then
  ix:= 1
  else
  begin
    ix := -1;
    cp := -1;
  end;
  if dy > 0 then
  iy := 1
  else
  iy := -1;
  If adx >= ady then
  begin
    dr := 2 * ady;
    du := dr-2*adx;
    pp := dr-adx;
    For i := 0 to adx do
    begin
      {SpcSixel(x,y,pal,col);  }
      x:= x + ix;
      If pp > cp then
      begin
        y := y + iy;
        pp := pp + du;
      end
      else
      pp := pp + dr;
    end;
  end
  else
  begin
    dr := 2*adx;
    du := dr -2* ady;
    pp := dr-ady;
    For i := 0 to ady do
    begin
      {SpcSixel(x,y,pal,col); }
      y := y + iy;
      If pp > cp then
      begin
        x := x + ix;
        pp := pp + du;
      end
      else
      pp := pp + dr;
    end;
  end;
end;
0
 

Author Comment

by:comicboy
ID: 6864104
Well thanks, Robert and Rabster, now my turn to try your code...
0
 

Author Comment

by:comicboy
ID: 6920718
Sorry for long delay, my Delphi disc broken but now it's up again, I've tried your code...

Excellent!!! it's working as best and as fast as I need

Thanks :)
0

Featured Post

VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Have you ever had your Delphi form/application just hanging while waiting for data to load? This is the article to read if you want to learn some things about adding threads for data loading in the background. First, I'll setup a general applica…
In my programming career I have only very rarely run into situations where operator overloading would be of any use in my work.  Normally those situations involved math with either overly large numbers (hundreds of thousands of digits or accuracy re…
In this video, Percona Solution Engineer Dimitri Vanoverbeke discusses why you want to use at least three nodes in a database cluster. To discuss how Percona Consulting can help with your design and architecture needs for your database and infras…
How to fix incompatible JVM issue while installing Eclipse While installing Eclipse in windows, got one error like above and unable to proceed with the installation. This video describes how to successfully install Eclipse. How to solve incompa…
Suggested Courses
Course of the Month14 days, 12 hours left to enroll

770 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question