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 来作为宽度, 却会长很多
请问, 正确公式该怎么做呢?
x,y = 111,333
back = RPG::Sprite.new
back.bitmap = Bitmap.new(640,480)
back.bitmap.fill_rect(0,0,640,480,Color.new(0,0,0))
a = RPG::Sprite.new
b = RPG::Sprite.new
c = RPG::Sprite.new
bbb = Bitmap.new(10,10)
bbb.fill_rect(0,0,10,10,Color.new(0,255,255))
a.bitmap = b.bitmap = bbb
a.set_xy(320,240)
b.set_xy(x,y)
c.set_xy(320,240)
#m = Math.sqrt((x - 320).abs^2 + (y - 240).abs^2)
m = (x-320).abs + (y-240).abs
c.bitmap = Bitmap.new(m,1)
c.bitmap.fill_rect(0,0,m,1,Color.new(255,255,255))
d = Math.atan((240-y).abs.to_f/(320-x).abs) / Math::PI * 180
if x < 320 and y > 240 #第三象限
r = -180
elsif x < 320 and y < 240 #第一象限
r = 90
elsif x > 320 and y < 240 #第四象限
r = -90
else
r = 0
end
c.angle = d + r
x,y = 111,333
back = RPG::Sprite.new
back.bitmap = Bitmap.new(640,480)
back.bitmap.fill_rect(0,0,640,480,Color.new(0,0,0))
a = RPG::Sprite.new
b = RPG::Sprite.new
c = RPG::Sprite.new
bbb = Bitmap.new(10,10)
bbb.fill_rect(0,0,10,10,Color.new(0,255,255))
a.bitmap = b.bitmap = bbb
a.set_xy(320,240)
b.set_xy(x,y)
c.set_xy(320,240)
#m = Math.sqrt((x - 320).abs^2 + (y - 240).abs^2)
m = (x-320).abs + (y-240).abs
c.bitmap = Bitmap.new(m,1)
c.bitmap.fill_rect(0,0,m,1,Color.new(255,255,255))
d = Math.atan((240-y).abs.to_f/(320-x).abs) / Math::PI * 180
if x < 320 and y > 240 #第三象限
r = -180
elsif x < 320 and y < 240 #第一象限
r = 90
elsif x > 320 and y < 240 #第四象限
r = -90
else
r = 0
end
c.angle = d + r
PS: 单纯两点之间画线从雷达图脚本里学到了,它用的是在直线距离上每一个点描绘, 然而我现在想要的是,两点之间连接一张图片, 图片的宽度 = 两点之间的距离, 所以那种方法没办法用~~~
作者: 任小雪 时间: 2022-2-28 00:35
相似三角形?
作者: 非常白菜 时间: 2022-2-28 01:10
x,y = 111,333
back = RPG::Sprite.new
back.bitmap = Bitmap.new(640,480)
back.bitmap.fill_rect(0,0,640,480,Color.new(0,0,0))
a = RPG::Sprite.new
b = RPG::Sprite.new
c = RPG::Sprite.new
aaa = Bitmap.new(10,10)
aaa.fill_rect(0,0,10,10,Color.new(255,0,255))
bbb = Bitmap.new(10,10)
bbb.fill_rect(0,0,10,10,Color.new(0,255,255))
a.bitmap = aaa
b.bitmap = bbb
a.x = 320
a.y = 240
b.x = x
b.y = y
c.x = 320
c.y = 240
m = Math.sqrt((x - 320)**2 + (y - 240)**2)
c.bitmap = Bitmap.new(m,1)
c.bitmap.fill_rect(0,0,m,1,Color.new(255,255,255))
d = Math.atan2( (240 - y), (x - 320)) / Math::PI * 180
c.angle = d
x,y = 111,333
back = RPG::Sprite.new
back.bitmap = Bitmap.new(640,480)
back.bitmap.fill_rect(0,0,640,480,Color.new(0,0,0))
a = RPG::Sprite.new
b = RPG::Sprite.new
c = RPG::Sprite.new
aaa = Bitmap.new(10,10)
aaa.fill_rect(0,0,10,10,Color.new(255,0,255))
bbb = Bitmap.new(10,10)
bbb.fill_rect(0,0,10,10,Color.new(0,255,255))
a.bitmap = aaa
b.bitmap = bbb
a.x = 320
a.y = 240
b.x = x
b.y = y
c.x = 320
c.y = 240
m = Math.sqrt((x - 320)**2 + (y - 240)**2)
c.bitmap = Bitmap.new(m,1)
c.bitmap.fill_rect(0,0,m,1,Color.new(255,255,255))
d = Math.atan2( (240 - y), (x - 320)) / Math::PI * 180
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 |