用Python中的随机点计算直角三角形

2024-10-01 17:40:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用turtle中的随机坐标创建直角三角形。有时我的代码是有效的,而另一些时候我的三角形斜边的方向是错误的。我花了几个小时试图找出是什么导致了不一致

代码中有几个形状。但是,只有RightTriangle类给了我问题,所以我删除了其他类

如果有人能找出我如何解决我面临的问题,我将不胜感激

from turtle import Turtle
import random
from math import sqrt, degrees, asin, acos, atan 

class Shape():

    turtle = Turtle()


class RightTriangle(Shape):

    def __init__(self, A, B):
        self.A = A
        self.B = B

    def draw(self):
        a = (self.B[0] - (self.A[0]))
        b = (self.B[1] - (self.A[1]))
        c = (sqrt((self.B[0] - self.A[0])**2 + (self.B[1] - self.A[1])**2))
        angleA = degrees(atan(a/b))
        angleB = degrees(atan(b/a))

        Shape.turtle.penup()
        Shape.turtle.setposition(self.A)
        Shape.turtle.pendown()
        Shape.turtle.forward(a)
        Shape.turtle.right(90)
        Shape.turtle.forward(b)
        Shape.turtle.right(180-angleA)
        Shape.turtle.forward(c)
        Shape.turtle.penup()


def random_shapes(count):

    def random_point():
        return (random.randint(-200,200), random.randint(-200,200))

    shapes = []

    for i in range(1, count+1):
            shapes += [RightTriangle(random_point(), random_point())]

    return shapes

def main():

    shapes = random_shapes(15)
    for s in shapes:
        s.draw()

    input ('Hit <enter> key to end.')
    input ('Have a nice day!')

main()

Tags: 代码fromimportselfdefrandompointforward
3条回答

一个非常简单的方法是在海龟代码中指向A点。你可以用它来做这个

Shape.turtle.setheading(Shape.turtle.towards(self.A))

代替

Shape.turtle.right(180-angleA)

这绝对是解决这个问题最不真实的数学方法,但它确实非常有效

您正在使用ab来表示dxdy,并且总是从A开始。想一想总是做right(90)(提示,它不能)是否正确。如果B垂直于A之上,你将向下而不是向上(如果你采用Selcuk提到的abs)

使用现有代码,边的长度可能为负值,这会改变“向前”移动和“向右”转弯的含义。计算长度时使用绝对值:

a = abs(self.B[0] - (self.A[0]))
b = abs(self.B[1] - (self.A[1]))

请注意c始终为正

另外,代码中不需要angleB变量

相关问题 更多 >

    热门问题