Project1

标题: 两点之间的距离问题 [打印本页]

作者: 灯笼菜刀王    时间: 2022-2-27 23:50
标题: 两点之间的距离问题
本帖最后由 灯笼菜刀王 于 2022-2-27 23:57 编辑

我知道两点之间的距离公式  √((x1-x2)^2 + (y1-y2)^2

但是以该值作为宽度 m = Math.sqrt((x1 - x2).abs^2 + (y1 - y2).abs^2)   描绘线条却短很多很多....


而用 m = (x1-x2).abs + (y1-y2).abs 来作为宽度, 却会长很多


请问, 正确公式该怎么做呢?

RUBY 代码复制
  1. x,y = 111,333
  2. back = RPG::Sprite.new
  3.   back.bitmap = Bitmap.new(640,480)
  4. back.bitmap.fill_rect(0,0,640,480,Color.new(0,0,0))
  5.   a = RPG::Sprite.new
  6.   b = RPG::Sprite.new
  7.   c = RPG::Sprite.new
  8.   bbb = Bitmap.new(10,10)
  9.   bbb.fill_rect(0,0,10,10,Color.new(0,255,255))
  10.   a.bitmap = b.bitmap = bbb
  11.   a.set_xy(320,240)
  12.   b.set_xy(x,y)
  13.   c.set_xy(320,240)
  14.   #m = Math.sqrt((x - 320).abs^2 + (y - 240).abs^2)
  15.   m = (x-320).abs + (y-240).abs
  16.   c.bitmap = Bitmap.new(m,1)
  17.   c.bitmap.fill_rect(0,0,m,1,Color.new(255,255,255))
  18.   d = Math.atan((240-y).abs.to_f/(320-x).abs) / Math::PI * 180
  19.   if x < 320 and y > 240 #第三象限
  20.     r = -180
  21.   elsif x < 320 and y < 240 #第一象限
  22.     r = 90
  23.   elsif x > 320 and y < 240 #第四象限
  24.     r = -90
  25.   else
  26.     r = 0
  27.   end
  28.   c.angle = d + r


PS: 单纯两点之间画线从雷达图脚本里学到了,它用的是在直线距离上每一个点描绘, 然而我现在想要的是,两点之间连接一张图片, 图片的宽度 = 两点之间的距离, 所以那种方法没办法用~~~
作者: 任小雪    时间: 2022-2-28 00:35
相似三角形?
作者: 非常白菜    时间: 2022-2-28 01:10
RUBY 代码复制
  1. x,y = 111,333
  2.   back = RPG::Sprite.new
  3.   back.bitmap = Bitmap.new(640,480)
  4.   back.bitmap.fill_rect(0,0,640,480,Color.new(0,0,0))
  5.   a = RPG::Sprite.new
  6.   b = RPG::Sprite.new
  7.   c = RPG::Sprite.new
  8.   aaa = Bitmap.new(10,10)
  9.   aaa.fill_rect(0,0,10,10,Color.new(255,0,255))
  10.   bbb = Bitmap.new(10,10)
  11.   bbb.fill_rect(0,0,10,10,Color.new(0,255,255))
  12.   a.bitmap = aaa
  13.   b.bitmap = bbb
  14.   a.x = 320
  15.   a.y = 240
  16.   b.x = x
  17.   b.y = y
  18.   c.x = 320
  19.   c.y = 240
  20.   m = Math.sqrt((x - 320)**2 + (y - 240)**2)
  21.   c.bitmap = Bitmap.new(m,1)
  22.   c.bitmap.fill_rect(0,0,m,1,Color.new(255,255,255))
  23.   d = Math.atan2( (240 - y), (x - 320)) / Math::PI * 180
  24.   c.angle = d



作者: SailCat    时间: 2022-2-28 01:29
因为ruby的^不是c#的^
请直接用Math.hypot(deltax, deltay) 不要自己编奇怪的表达式……
作者: RyanBern    时间: 2022-2-28 01:31
^ 在 ruby 中不是乘方,** 才是。
^ 是按位亦或。

可能是 matlab 敲习惯了(x)
作者: guoxiaomi    时间: 2022-2-28 01:54
罚酒三杯
作者: 鼠曲草    时间: 2022-2-28 11:39
power是相对复杂一点的函数,不同语言往往会用不同的运算符实现。这种确实直接调现成的好一点
作者: RPGzh500223    时间: 2022-2-28 15:22
本帖最后由 RPGzh500223 于 2022-2-28 15:38 编辑

其实 Math.atan2可以直接算出角度,不用像Math.atan那样分象限讨论 ……楼上已经写出来了
我好奇你PS的内容,可否做张示意图




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