设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索

水平线描画

查看数: 2753 | 评论数: 5 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2019-4-12 21:57

正文摘要:

本帖最后由 流浪杰哥 于 2019-4-12 21:59 编辑 先上图,这个里面的是横向水平线的描画,请问纵向水平线该如何描画呢?还请大佬们解惑

回复

流浪杰哥 发表于 2019-4-13 10:19:18

这个没有问题,可行,非常感谢!
流浪杰哥 发表于 2019-4-13 10:18:39

老哥这个似乎更高端,非常感谢!
流浪杰哥 发表于 2019-4-13 09:44:30

我试了试,感觉这样似乎没毛病。。。
丿梁丶小柒 发表于 2019-4-13 00:53:11
  1. class Bitmap
  2.   #--------------------------------------------------------------------------
  3.   # ● 描绘直线   
  4.   #     x1,y1,x2,y2:  直线两端的坐标
  5.   #     width:    宽度  
  6.   #     color:    颜色
  7.   #--------------------------------------------------------------------------
  8.   def drawline(x1, y1, x2, y2, width, color)
  9.     x1 = x1.to_f
  10.     y1 = y1.to_f
  11.     x2 = x2.to_f
  12.     y2 = y2.to_f
  13.     width = width.to_f
  14.     k = (y2 - y1) / (x2 - x1)
  15.     if k.abs > 1
  16.       drawline_x(x1, y1, x2, y2, width, color)
  17.     else
  18.       drawline_y(x1, y1, x2, y2, width, color)
  19.     end
  20.   end
  21.   def drawline_x(x1, y1, x2, y2, width, color)
  22.     l = ((x1 - x2) ** 2 + (y1 - y2) ** 2) ** 0.5 * width / (y1 - y2)
  23.     length = l.abs * 2
  24.     k = (x2 - x1) / (y2 - y1) #x=ky+b
  25.     b = x1 - k * y1
  26.     if l > 0
  27.       for ty in y2.to_i..y1.to_i
  28.         tx = ty * k + b
  29.         fill_rect(tx - l, ty, length, 1, color)
  30.       end
  31.     else
  32.       for ty in y1.to_i..y2.to_i
  33.         tx = ty * k + b
  34.         fill_rect(tx + l, ty, length, 1, color)
  35.       end
  36.     end
  37.   end
  38.   def drawline_y(x1, y1, x2, y2, width, color)
  39.     l = ((x1 - x2) ** 2 + (y1 - y2) ** 2) ** 0.5 * width / (x1 - x2)
  40.     height = l.abs * 2
  41.     k = (y2 - y1) / (x2 - x1) #y=kx+b
  42.     b = y1 - k * x1
  43.     if l > 0
  44.       for tx in x2.to_i..x1.to_i
  45.         ty = tx * k + b
  46.         fill_rect(tx, ty - l, 1, height, color)
  47.       end
  48.     else
  49.       for tx in x1.to_i..x2.to_i
  50.         ty = tx * k + b
  51.         fill_rect(tx, ty + l, 1, height, color)
  52.       end
  53.     end
  54.   end
  55. end
复制代码

  1. 使用方式
  2. @sprite = Sprite.new
  3. @sprite.bitmap = Bitmap.new(100,100)
  4. @sprite.bitmap.drawline(0,0,100,100,Color.new(255,255,255))
复制代码

评分

参与人数 1星屑 +30 收起 理由
VIPArcher + 30 认可答案

查看全部评分

KB.Driver 发表于 2019-4-12 22:23:42
依样画葫芦就好
  1. def draw_verc_line(x)
  2.   line_x = x + line_height / 2 - 1
  3.   contents.fill_rect(line_x, 0, 2, contents_height, line_color)
  4. end
复制代码

点评

这不对啊  发表于 2019-4-13 00:50

评分

参与人数 1星屑 +30 收起 理由
VIPArcher + 30 认可答案

查看全部评分

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-16 20:50

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表