赞 | 1 |
VIP | 0 |
好人卡 | 11 |
积分 | 0 |
经验 | 26243 |
最后登录 | 2014-8-4 |
在线时间 | 841 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 48
- 在线时间
- 841 小时
- 注册时间
- 2010-8-11
- 帖子
- 1135
|
给你一个东西,很多年前自己写的:
(注意:里面的变量的名字可能和你说的有点不同,请注意看注释。)- #==============================================================================
- # ** RCS(Rectangular Coordinate System)
- #------------------------------------------------------------------------------
- # 各种关于平面直角坐标系的方法集合。
- #==============================================================================
- module RCS
- #----------------------------------------------------------------------------
- # * 用两点求一次函数的k值
- #----------------------------------------------------------------------------
- def self.linear_function_k(x1, y1, x2, y2)
- x = x1.to_f - x2.to_f
- y = y1.to_f - y2.to_f
- return y.abs / x.abs
- end
- #----------------------------------------------------------------------------
- # * 用两点求一次函数的b值
- #----------------------------------------------------------------------------
- def self.linear_function_b(x1, y1, x2, y2)
- k = RCS.linear_function_k(x1, y1, x2, y2)
- return y1.to_f - x1.to_f * k.to_f
- end
- #----------------------------------------------------------------------------
- # * 求出一个一次函数的y值
- #----------------------------------------------------------------------------
- def self.linear_function_y(x, k, b)
- return k.to_f * x.to_f + b.to_f
- end
- end
- class Bitmap
- #----------------------------------------------------------------------------
- # * 描绘直线 by 945127391
- # begin_x : 直线开始的x坐标
- # begin_y : 直线开始的y坐标
- # end_x : 直线结束的x坐标
- # end_y : 直线结束的y坐标
- # color : 直线的颜色
- # line_width : 直线的宽度(厚度)
- #----------------------------------------------------------------------------
- def draw_straight_line(begin_x, begin_y, end_x, end_y, line_width, color)
- if begin_x == end_x
- bitmap = Bitmap.new(line_width, (end_y-begin_y).abs)
- bitmap.fill_rect(0, 0, bitmap.width, bitmap.height, color)
- rect = Rect.new(0, 0, bitmap.width, bitmap.height)
- blt(begin_x, begin_y, bitmap, rect)
- bitmap.dispose
- elsif begin_y == end_y
- bitmap = Bitmap.new((end_x-begin_x).abs, line_width)
- bitmap.fill_rect(0, 0, bitmap.width, bitmap.height, color)
- rect = Rect.new(0, 0, bitmap.width, bitmap.height)
- blt(begin_x, begin_y, bitmap, rect)
- bitmap.dispose
- else draw_linear_function(begin_x, begin_y, end_x, end_y, line_width, color)
- end
- end
- #----------------------------------------------------------------------------
- # * 描绘斜线 by 945127391
- # begin_x : 斜线开始的x坐标
- # begin_y : 斜开始的y坐标
- # end_x : 斜线结束的x坐标
- # end_y : 斜线结束的y坐标
- # color : 斜线的颜色
- # line_width : 斜线的宽度(厚度)
- #----------------------------------------------------------------------------
- def draw_linear_function(begin_x, begin_y, end_x, end_y, line_width, color)
- k = RCS.linear_function_k(begin_x, begin_y, end_x, end_y)
- b = RCS.linear_function_b(begin_x, begin_y, end_x, end_y)
- bitmap = Bitmap.new((begin_x - end_x).abs, (begin_y - end_y).abs)
- for x in 0...(begin_x - end_x).abs
- y = RCS.linear_function_y(x, k, b)
- rect = Rect.new(x, y, line_width, line_width)
- bitmap.fill_rect(rect, color)
- end
- blt(begin_x, begin_y, bitmap, bitmap.rect)
- bitmap.dispose
- end
- end
复制代码 使用的时候直接对Bitmap用draw_straight_line就可以了 |
|