Project1

标题: 如何画两点间的连线 [打印本页]

作者: 345912390    时间: 2012-10-17 10:02
标题: 如何画两点间的连线
{:2_253:} 请问一下:如何在同一Windows中画两点间的连线?
需要参数有
  1. s_x#起点X坐标
  2. s_y#起点Y坐标
  3. o_x#终点X坐标
  4. o_y#终点Y坐标
  5. color#线条颜色
  6. Width#线条宽度有默认值
复制代码
求函数脚本dsu_plus_rewardpost_czw
作者: satgo1546    时间: 2012-10-17 19:17
主站上有教程的吧……
http://www.66rpg.com/articles/4652
* 但是没有width(我加上应该很容易的)
作者: 945127391    时间: 2012-10-18 04:28
给你一个东西,很多年前自己写的:
(注意:里面的变量的名字可能和你说的有点不同,请注意看注释。)
  1. #==============================================================================
  2. # ** RCS(Rectangular Coordinate System)
  3. #------------------------------------------------------------------------------
  4. #    各种关于平面直角坐标系的方法集合。
  5. #==============================================================================
  6. module RCS
  7.   #----------------------------------------------------------------------------
  8.   # * 用两点求一次函数的k值
  9.   #----------------------------------------------------------------------------
  10.   def self.linear_function_k(x1, y1, x2, y2)
  11.     x = x1.to_f - x2.to_f
  12.     y = y1.to_f - y2.to_f
  13.     return y.abs / x.abs
  14.   end
  15.   #----------------------------------------------------------------------------
  16.   # * 用两点求一次函数的b值
  17.   #----------------------------------------------------------------------------
  18.   def self.linear_function_b(x1, y1, x2, y2)
  19.     k = RCS.linear_function_k(x1, y1, x2, y2)
  20.     return y1.to_f - x1.to_f * k.to_f
  21.   end
  22.   #----------------------------------------------------------------------------
  23.   # * 求出一个一次函数的y值
  24.   #----------------------------------------------------------------------------
  25.   def self.linear_function_y(x, k, b)
  26.     return k.to_f * x.to_f + b.to_f
  27.   end
  28. end
  29. class Bitmap
  30.   #----------------------------------------------------------------------------
  31.   # * 描绘直线 by 945127391
  32.   # begin_x : 直线开始的x坐标
  33.   # begin_y : 直线开始的y坐标
  34.   # end_x   : 直线结束的x坐标
  35.   # end_y   : 直线结束的y坐标
  36.   # color   : 直线的颜色
  37.   # line_width   : 直线的宽度(厚度)
  38.   #----------------------------------------------------------------------------
  39.   def draw_straight_line(begin_x, begin_y, end_x, end_y, line_width, color)
  40.     if begin_x == end_x
  41.       bitmap = Bitmap.new(line_width, (end_y-begin_y).abs)
  42.       bitmap.fill_rect(0, 0, bitmap.width, bitmap.height, color)
  43.       rect = Rect.new(0, 0, bitmap.width, bitmap.height)
  44.       blt(begin_x, begin_y, bitmap, rect)
  45.       bitmap.dispose
  46.     elsif begin_y == end_y
  47.       bitmap = Bitmap.new((end_x-begin_x).abs, line_width)
  48.       bitmap.fill_rect(0, 0, bitmap.width, bitmap.height, color)
  49.       rect = Rect.new(0, 0, bitmap.width, bitmap.height)
  50.       blt(begin_x, begin_y, bitmap, rect)
  51.       bitmap.dispose
  52.     else draw_linear_function(begin_x, begin_y, end_x, end_y, line_width, color)
  53.     end
  54.   end
  55.   #----------------------------------------------------------------------------
  56.   # * 描绘斜线  by 945127391
  57.   # begin_x : 斜线开始的x坐标
  58.   # begin_y : 斜开始的y坐标
  59.   # end_x   : 斜线结束的x坐标
  60.   # end_y   : 斜线结束的y坐标
  61.   # color   : 斜线的颜色
  62.   # line_width   : 斜线的宽度(厚度)
  63.   #----------------------------------------------------------------------------
  64.   def draw_linear_function(begin_x, begin_y, end_x, end_y, line_width, color)
  65.     k = RCS.linear_function_k(begin_x, begin_y, end_x, end_y)
  66.     b = RCS.linear_function_b(begin_x, begin_y, end_x, end_y)
  67.     bitmap = Bitmap.new((begin_x - end_x).abs, (begin_y - end_y).abs)
  68.     for x in 0...(begin_x - end_x).abs
  69.       y = RCS.linear_function_y(x, k, b)
  70.       rect = Rect.new(x, y, line_width, line_width)
  71.       bitmap.fill_rect(rect, color)
  72.     end
  73.     blt(begin_x, begin_y, bitmap, bitmap.rect)
  74.     bitmap.dispose
  75.   end
  76. end
复制代码
使用的时候直接对Bitmap用draw_straight_line就可以了




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1