Mục tiêu của tôi là tạo hình tròn ra khỏi các đường trong pygame, sử dụng các điểm cuối ngẫu nhiên xung quanh mép của hình tròn và điểm bắt đầu không đổi (giữa vòng tròn). Vì vậy, tôi quyết định rằng tôi sẽ cung cấp cho hàm pygame.draw.line: screen, aRandomColor, startingPosition và endingPosition làm đối số. Vị trí kết thúc là một bộ chứa giá trị x được tạo ngẫu nhiên và hàm trợ giúp sẽ tính giá trị y dựa trên bán kính của vòng tròn. Chức năng đầu tiên của tôi tính toán giá trị y như thế này:sai số phối hợp công thức khoảng cách python
import math
import random
def findY(pos1, pos2, distance, bothValues=False):
p1 =pos1
p2 = pos2
x1 = float(p1[0])
y1 = float(p1[1])
x2 = float(p2[0])
d = float(distance)
y2 = y1 - math.sqrt(d**2 - (x1-x2)**2)
_y2 = y1 + math.sqrt(d**2 - (x1-x2)**2)
if bothValues==True:
return y2, _y2
else:
return y2
và dòng ngăn kéo:
width = 500
height = 500
def randLine(surface, color=rand, start=rand, end=rand,length=rand):
if start==rand:
start = randPos()
if end==rand:
end = randPos()
if color==rand:
color = randColor()
if length != rand:
end_x = float(random.randint(0,width))
end_pos = (end_x, "y")
y2=findMissing(start_pos, end_pos,l,bothValues=True)
a = random.randint(0,1)
if a==0:
y2 = float(y2[0])
else:
y2 = float(y2[1])
lst = list(end_pos)
lst[1] = y2
end_pos = tuple(lst)
pygame.draw.line(surface, color, start_pos, end_pos)
Sau đó:
drawRandLine(screen,start=(200,200),lenght=100)
(các chức năng khác mà những cái gọi là như randPos aren' t vấn đề). Điều này vì một số lý do đã tạo ra lỗi mà tôi đã chẩn đoán là giá trị bên trong math.sqrt() là một số âm. Nhưng điều đó không thể xảy ra, vì mọi giá trị trong đó được nâng lên thành lũy thừa của 2, và đó là điều tôi đang bối rối. Vì vậy, tôi đã thay đổi giá trị bên trong math.sqrt() thành giá trị tuyệt đối của nó. Điều này làm chức năng không tăng bất kỳ lỗi nào, nhưng vòng tròn vẽ trông như thế này:
Tôi biết của pygame rằng giá trị tọa độ y của máy bay lộn ngược, nhưng mà nên tạo sự khác biệt?
Những giao diện * đáng ngờ * như [hyperbolas] (https://en.wikipedia.org/wiki/Hyperbola) ... –
Chúng là nghịch đảo của nhau trên trục x, đó là lý do tại sao chúng trông cong. – Vityou
Giá trị bên trong 'sqrt' trong' math.sqrt (d ** 2 - (x1-x2) ** 2) 'thực sự có thể là số âm, nếu' abs (d)
Galax