DZone
Thanks for visiting DZone today,
Edit Profile
  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
Sign Out View Profile
  • Post an Article
  • Manage My Drafts
Over 2 million developers have joined DZone.
Log In / Join
Refcards Trend Reports
Events Video Library
Refcards
Trend Reports

Events

View Events Video Library

Zones

Culture and Methodologies Agile Career Development Methodologies Team Management
Data Engineering AI/ML Big Data Data Databases IoT
Software Design and Architecture Cloud Architecture Containers Integration Microservices Performance Security
Coding Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks
Culture and Methodologies
Agile Career Development Methodologies Team Management
Data Engineering
AI/ML Big Data Data Databases IoT
Software Design and Architecture
Cloud Architecture Containers Integration Microservices Performance Security
Coding
Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance
Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks

Curious about the future of data-driven systems? Join our Data Engineering roundtable and learn how to build scalable data platforms.

Data Engineering: The industry has come a long way from organizing unstructured data to adopting today's modern data pipelines. See how.

Threat Detection: Learn core practices for managing security risks and vulnerabilities in your organization — don't regret those threats!

Managing API integrations: Assess your use case and needs — plus learn patterns for the design, build, and maintenance of your integrations.

Related

  • Two-Pass Huffman in Blocks of 2 Symbols: Golang Implementation
  • Hybrid Search: A New Frontier in Enterprise Search
  • How to Create a Search Engine and Algorithm With ClickHouse and Snowflake
  • Predicting Traffic Volume With Artificial Intelligence and Machine Learning

Trending

  • The Power of Market Disruption: How to Detect Fraud With Graph Data
  • Platform Engineering: A Strategic Response to the Growing Complexity of Modern Software Architectures
  • What the CrowdStrike Crash Exposed About the Future of Software Testing
  • AI-Powered Flashcard Application With Next.js, Clerk, Firebase, Material UI, and LLaMA 3.1
  1. DZone
  2. Data Engineering
  3. AI/ML
  4. Draw, Plot 2d Line In C# (csharp) - Bresenham's Line Algorithm

Draw, Plot 2d Line In C# (csharp) - Bresenham's Line Algorithm

By 
Snippets Manager user avatar
Snippets Manager
·
Apr. 26, 07 · Code Snippet
Likes (0)
Comment
Save
Tweet
Share
3.7K Views

Join the DZone community and get the full member experience.

Join For Free
based on wikipedia

    public interface ISetPixel
    {
        void SetPixel(Point point);
    }
    public partial class Algorithms2D
    {
        public delegate void SetPixel(Point point);
        public static void Line(Point p0,Point p1,G plot)
            where G:ISetPixel
        {
            int x0=p0.X;
            int y0=p0.Y;
            int x1=p1.X;
            int y1=p1.Y;
            bool steep=abs(y1-y0)>abs(x1-x0);
            if (steep)
            {
                swap(ref x0,ref y0);
                swap(ref x1,ref y1);
            }
            if (x0>x1)
            {
                swap(ref x0,ref x1);
                swap(ref y0,ref y1);
            }
            int deltax=x1-x0;
            int deltay=abs(y1-y0);
            int error=-deltax/2;
            int ystep;
            int y=y0;
            if (y00)
                {
                    y=y+ystep;
                    error=error-deltax;
                }
            }
        }
        struct CSetPixel:ISetPixel
        {
            public CSetPixel(SetPixel setPixel)
            {
                this.setPixel=setPixel;
            }
            SetPixel setPixel;
            #region ISetPixel Members
            public void SetPixel(Point point)
            {
                setPixel(point);
            }
            #endregion
        }
        public static void Line(Point p0,Point p1,SetPixel plot)
        {
            Line(p0,p1,new CSetPixel(plot));
        }
        private static int abs(int p)
        {
            return Math.Abs(p);
        }
        private static void swap(ref T x0,ref T y0)
        {
            T z=x0;
            x0=y0;
            y0=z;
        }
    }


unit tests (c# 3.0):


    [TestFixture]
    public class Line
    {
        [Test]
        public void LineDiagonal()
        {
            List l = new List();
            Algorithms2D.Line(new Point(0,0),new Point(3,3),z=>l.Add(z));
            Assert.AreEqual(3, l.Count);
            Assert.AreEqual(new Point(0, 0), l[0]);
            Assert.AreEqual(new Point(1, 1), l[1]);
            Assert.AreEqual(new Point(2, 2), l[2]);
        }
        [Test]
        public void Line45()
        {
            List l = new List();
            Algorithms2D.Line(new Point(0, 0),new Point(6, 3), z => l.Add(z));
            Assert.AreEqual(6, l.Count);
            Assert.AreEqual(new Point(0, 0), l[0]);
            Assert.AreEqual(new Point(1, 0), l[1]);
            Assert.AreEqual(new Point(2, 1), l[2]);
            Assert.AreEqual(new Point(3, 1), l[3]);
            Assert.AreEqual(new Point(4, 2), l[4]);
            Assert.AreEqual(new Point(5, 2), l[5]);
        }
    }
Algorithm

Opinions expressed by DZone contributors are their own.

Related

  • Two-Pass Huffman in Blocks of 2 Symbols: Golang Implementation
  • Hybrid Search: A New Frontier in Enterprise Search
  • How to Create a Search Engine and Algorithm With ClickHouse and Snowflake
  • Predicting Traffic Volume With Artificial Intelligence and Machine Learning

Partner Resources


Comments

The likes didn't load as expected. Please refresh the page and try again.

ABOUT US

  • About DZone
  • Support and feedback
  • Community research
  • Sitemap

ADVERTISE

  • Advertise with DZone

CONTRIBUTE ON DZONE

  • Article Submission Guidelines
  • Become a Contributor
  • Core Program
  • Visit the Writers' Zone

LEGAL

  • Terms of Service
  • Privacy Policy

CONTACT US

  • 3343 Perimeter Hill Drive
  • Suite 100
  • Nashville, TN 37211
  • support@dzone.com

Let's be friends: