Python 防止直线相交?

Python 防止直线相交?,python,intersection,turtle-graphics,Python,Intersection,Turtle Graphics,我有一个简单的乌龟程序,它以模糊的随机模式绘制线条;我把它用于我自己的艺术目的(我喜欢这个图案) 但是,我想防止线重叠,也就是说,我想防止海龟画过一条已经存在的线,以防止它制作盒子。但是,我看不到任何方法可以提取海龟在文档中画的线,以及类似以下问题: 这并不是很有帮助 它与此不同: 因为我没有使用网格,而使用网格不会以我想要的方式生成线,或者网格必须是非常细粒度的 import turtle import random turtle_actor = turtle.Turtle() re

我有一个简单的乌龟程序,它以模糊的随机模式绘制线条;我把它用于我自己的艺术目的(我喜欢这个图案)

但是,我想防止线重叠,也就是说,我想防止海龟画过一条已经存在的线,以防止它制作盒子。但是,我看不到任何方法可以提取海龟在文档中画的线,以及类似以下问题:

这并不是很有帮助

它与此不同:

因为我没有使用网格,而使用网格不会以我想要的方式生成线,或者网格必须是非常细粒度的

import turtle
import random

turtle_actor = turtle.Turtle()

rect = turtle.Screen()
dims = rect.screensize()
x_max = dims[0]
y_max = dims[1]
x_min = x_max*-1
y_min = y_max*-1
turtle_actor.speed(0)

def position_check():
     global turtle_actor
     global y_max
     global x_max
     global y_min
     global x_min
     if turtle_actor.xcor() < x_min or turtle_actor.xcor() > x_max or turtle_actor.ycor() < y_min or turtle_actor.ycor() > y_max:
          turtle_actor.penup()
          turtle_actor.goto((random.randrange(x_min,x_max),random.randrange(y_min,y_max)))
          turtle_actor.pendown()

def recurse(length,n):
     global turtle_actor
     global y_max
     global x_max
     global y_min
     global x_min
     if n < 1:
          return
     l_use = length/random.choice([2,2,2,3,4,5,7,1])
     turtle_actor.forward(l_use)
     position_check()
     turtle_actor.left(random.choice([0,90,-90,180]))
     position_check()
     turtle_actor.left(random.choice([0,90,-90,180]))
     position_check()
     turtle_actor.backward(l_use)
     position_check()
     recurse(length,n-1)
     return  


recurse(50,1000)
导入海龟
随机输入
海龟演员=海龟。海龟()
rect=turtle.Screen()
dims=rect.screensize()
x_max=dims[0]
y_max=dims[1]
x_最小值=x_最大值*-1
y_最小值=y_最大值*-1
乌龟演员速度(0)
def位置检查()
全球乌龟演员
全局y_max
全局x_max
全球友民
全局x_min
如果turtle_actor.xcor()x_max或turtle_actor.ycor()y_max:
乌龟
turtle_actor.goto((random.randrange(x_min,x_max),random.randrange(y_min,y_max)))
乌龟演员彭敦
def递归(长度,n):
全球乌龟演员
全局y_max
全局x_max
全球友民
全局x_min
如果n<1:
返回
l_use=长度/随机选择([2,2,2,3,4,5,7,1])
乌龟演员向前(左用)
位置检查()
左(随机选择([0,90,-90180]))
位置检查()
左(随机选择([0,90,-90180]))
位置检查()
海龟演员。向后(l_使用)
位置检查()
递归(长度,n-1)
返回
递归(501000)

海龟图形没有内存。您必须跟踪在自己的python数据结构中绘制的所有线条,然后在绘制每一条新线时,查看它是否与前面的一条线相交。不幸的是,这是O(n^2);但是有一些方法可以通过快速排除许多远距离的线来加快速度,例如see。

海龟图形没有内存。您必须跟踪在自己的python数据结构中绘制的所有线条,然后在绘制每一条新线时,查看它是否与前面的一条线相交。不幸的是,这是O(n^2);但是,有一些方法可以通过快速拒绝许多远距离线路来加快速度,例如,请参见。

我无法让您的代码运行NameError:name'tree'未定义是的,很抱歉我更改了代码,我在“不正确”中留下了一个删除的函数名。您的问题不清楚您是否试图阻止直线相交或重叠,或者两者都是。相交需要重叠,是吗?重叠同样需要交叉。从我的角度来看,阻止一个就是阻止另一个。我无法让您的代码运行NameError:名称“tree”未定义哦是的,很抱歉我更改了代码,我在错误中留下了一个已删除的函数名。您的问题不清楚您是否试图阻止直线相交或重叠,或者两者都要。相交需要重叠,是吗?重叠同样需要交叉。从我的角度来看,阻止一条线就是阻止另一条线。如果你只是想让它工作,不要担心四叉树——只要将每条新的(潜在的)线与所有旧的线相交即可。如果你只做1000行,速度就足够快了。我可能会这么做,但我也会尝试实现一个四叉树,为了学习和其他有趣的问题,当你的新行相交时,你会怎么做?你可能会陷入这样一种情况:你选择的新线都不是“好的”。看起来是个有趣的项目!如果你只是想让它工作,不用担心四叉树——只要把每一条新的(潜在的)线与所有的旧线相交即可。如果你只做1000行,速度就足够快了。我可能会这么做,但我也会尝试实现一个四叉树,为了学习和其他有趣的问题,当你的新行相交时,你会怎么做?你可能会陷入这样一种情况:你选择的新线都不是“好的”。看起来是个有趣的项目!