{"id":977,"date":"2012-09-21T12:30:00","date_gmt":"2012-09-21T12:30:00","guid":{"rendered":"http:\/\/41j.com\/blog\/?p=977"},"modified":"2012-09-21T12:30:00","modified_gmt":"2012-09-21T12:30:00","slug":"bresenhams-line-drawing-algorithm-implemetations-in-go-and-c","status":"publish","type":"post","link":"https:\/\/41j.com\/blog\/2012\/09\/bresenhams-line-drawing-algorithm-implemetations-in-go-and-c\/","title":{"rendered":"Bresenham&#8217;s line drawing algorithm implemetations in Go and C."},"content":{"rendered":"<p>Couple of Bresenham&#8217;s line drawing implementations in C and Go. They will need hacking to suit your application.<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nvoid display_draw_line(int start_x,int start_y,int end_x,int end_y,uint16_t color) {\r\n\r\n  \/\/ Bresenham's\r\n  int cx = start_x;\r\n  int cy = start_y;\r\n\r\n  int dx = end_x - cx;\r\n  int dy = end_y - cy;\r\n  if(dx&lt;0) dx = 0-dx;\r\n  if(dy&lt;0) dy = 0-dy;\r\n\r\n  int sx=0; int sy=0;\r\n  if(cx &lt; end_x) sx = 1; else sx = -1;\r\n  if(cy &lt; end_y) sy = 1; else sy = -1;\r\n  int err = dx-dy;\r\n\r\n  for(int n=0;n&lt;1000;n++) {\r\n    display_draw_point(cx,cy,color);\r\n    if((cx==end_x) &amp;&amp; (cy==end_y)) return;\r\n    int e2 = 2*err;\r\n    if(e2 &gt; (0-dy)) { err = err - dy; cx = cx + sx; }\r\n    if(e2 &lt; dx    ) { err = err + dx; cy = cy + sy; }\r\n  }\r\n}\r\n<\/pre>\n<p>And golang:<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\nfunc draw_line(start_x int32,start_y int32,end_x int32,end_y int32,color uint32,screen* sdl.Surface) {\r\n\r\n  \/\/ Bresenham's\r\n  var cx int32 = start_x;\r\n  var cy int32 = start_y;\r\n\r\n  var dx int32 = end_x - cx;\r\n  var dy int32 = end_y - cy;\r\n  if dx&lt;0 { dx = 0-dx; }\r\n  if dy&lt;0 { dy = 0-dy; }\r\n\r\n  var sx int32;\r\n  var sy int32;\r\n  if cx &lt; end_x { sx = 1; } else { sx = -1; }\r\n  if cy &lt; end_y { sy = 1; } else { sy = -1; }\r\n  var err int32 = dx-dy;\r\n\r\n  var n int32;\r\n  for n=0;n&lt;1000;n++ {\r\n    draw_point(cx,cy,color,screen);\r\n    if((cx==end_x) &amp;&amp; (cy==end_y)) {return;}\r\n    var e2 int32 = 2*err;\r\n    if e2 &gt; (0-dy) { err = err - dy; cx = cx + sx; }\r\n    if e2 &lt; dx     { err = err + dx; cy = cy + sy; }\r\n  }\r\n}\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Couple of Bresenham&#8217;s line drawing implementations in C and Go. They will need hacking to suit your application. void display_draw_line(int start_x,int start_y,int end_x,int end_y,uint16_t color) { \/\/ Bresenham&#8217;s int cx = start_x; int cy = start_y; int dx = end_x &#8211; cx; int dy = end_y &#8211; cy; if(dx&lt;0) dx = 0-dx; if(dy&lt;0) dy = [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[1],"tags":[],"class_list":["post-977","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p1RRoU-fL","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/41j.com\/blog\/wp-json\/wp\/v2\/posts\/977","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/41j.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/41j.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/41j.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/41j.com\/blog\/wp-json\/wp\/v2\/comments?post=977"}],"version-history":[{"count":1,"href":"https:\/\/41j.com\/blog\/wp-json\/wp\/v2\/posts\/977\/revisions"}],"predecessor-version":[{"id":978,"href":"https:\/\/41j.com\/blog\/wp-json\/wp\/v2\/posts\/977\/revisions\/978"}],"wp:attachment":[{"href":"https:\/\/41j.com\/blog\/wp-json\/wp\/v2\/media?parent=977"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/41j.com\/blog\/wp-json\/wp\/v2\/categories?post=977"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/41j.com\/blog\/wp-json\/wp\/v2\/tags?post=977"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}