求线段的等分点
extends Node2D
var pos:Vector2
var split_num:int
var p1 = Vector2(200,200)
var p2 = Vector2(100,100)
func _input(event: InputEvent) -> void:
if event is InputEventMouseButton:
if event.button_index == MOUSE_BUTTON_WHEEL_DOWN:
split_num = clamp(split_num-1,0,10)
if event.button_index == MOUSE_BUTTON_WHEEL_UP:
split_num = clamp(split_num+1,0,10)
queue_redraw()
func _draw() -> void:
myCanvas.draw_vector(self,p1,p2)
var points = line_splits(p1,p2,split_num)
for p in points:
myCanvas.draw_point(self,p)
pass
# 返回线段的等分点(不包含起始和终止点)
func line_splits(p1:Vector2,p2:Vector2,num:int=2) ->PackedVector2Array:
var arr:PackedVector2Array
for i in range(1,num):
arr.append(p1.lerp(p2,float(i)/float(num)))
return arr
求反向平行线段之间的对角线
extends Node2D
var pos:Vector2
var split_num:int
func _input(event: InputEvent) -> void:
if event is InputEventMouseButton:
if event.button_index == MOUSE_BUTTON_WHEEL_DOWN:
split_num = clamp(split_num-1,0,10)
if event.button_index == MOUSE_BUTTON_WHEEL_UP:
split_num = clamp(split_num+1,0,10)
queue_redraw()
func _draw() -> void:
var p1 = Vector2(200,200)
var p2 = Vector2(200,400)
var p3 = Vector2(500,200)
var p4 = Vector2(500,400)
myCanvas.draw_vector(self,p1,p2)
myCanvas.draw_vector(self,p4,p3)
var points = line_lerps(p1,p2,10)
var points2 = line_lerps(p4,p3,10)
for i in range(points.size()):
myCanvas.draw_vector(self,points[i],points2[i])
# 返回线段的等分点(包含起始和终止点)
func line_lerps(p1:Vector2,p2:Vector2,num:int=2) ->PackedVector2Array:
var arr:PackedVector2Array
for i in range(0,num+1):
arr.append(p1.lerp(p2,float(i)/float(num)))
return arr
extends Node2D
var pos:Vector2
var split_num:int
func _input(event: InputEvent) -> void:
if event is InputEventMouseMotion:
pos = event.position
queue_redraw()
func _draw() -> void:
var p1 = Vector2(100,200)
var p2 = Vector2(200,500)
var p3 = Vector2(100,100)
var p4 = pos
myCanvas.draw_vector(self,p1,p2)
myCanvas.draw_vector(self,p3,p4)
var points = line_lerps(p1,p2,10)
var points2 = line_lerps(p3,p4,10)
for i in range(points.size()):
myCanvas.draw_vector(self,points[i],points2[i])
var points3 = line_lerps(p2,p4,10)
var points4 = line_lerps(p1,p3,10)
for i in range(points3.size()):
myCanvas.draw_vector(self,points3[i],points4[i])
pass
# 返回线段的等分点(不包含起始和终止点)
func line_splits(p1:Vector2,p2:Vector2,num:int=2) ->PackedVector2Array:
var arr:PackedVector2Array
for i in range(1,num):
arr.append(p1.lerp(p2,float(i)/float(num)))
return arr
# 返回线段的等分点(包含起始和终止点)
func line_lerps(p1:Vector2,p2:Vector2,num:int=2) ->PackedVector2Array:
var arr:PackedVector2Array
for i in range(0,num+1):
arr.append(p1.lerp(p2,float(i)/float(num)))
return arr