xticks barplot python pygame

python - barplot - pandas plot



Python-Genera vértices aleatorios alrededor de la posición central(x, y) (2)

Puede usar la biblioteca random para muestrear al azar en coordenadas polares. Muestra una orientación, luego muestra una distancia radial. En el siguiente ejemplo elegí que la orientación se distribuiría uniformemente en [0, 2*pi] y que el radio se distribuiría normalmente con la media de entrada del usuario y la desviación estándar.

import random import math def generate_points(center_x, center_y, mean_radius, sigma_radius, num_points): points = [] for i in range(num_points): theta = random.uniform(0, 2*math.pi) radius = random.gauss(mean_radius, sigma_radius) x = center_x + radius * math.cos(theta) y = center_y + radius * math.sin(theta) points.append([x,y]) return points

Como un ejemplo de cómo llamarlo

>>> generate_points(5.0, 7.0, 1.0, 0.1, 8) [[4.4478263120757875, 6.018608023032151], [4.407825651072504, 6.294849028359581], [5.0570272843718085, 6.17834681191539], [5.307793789416231, 6.156715230672773], [4.368508167422119, 7.712616387293795], [5.327972045495855, 5.917733119760926], [5.748935178651789, 6.437863588580371], [3.9312163910881033, 6.388093041756519]]

Si quiere que los puntos se enrollen en un orden particular, entonces usaría algo como numpy.linspace para caminar en sentido horario o antihorario para muestrear theta. Por ejemplo

import random import math import numpy as np def generate_points(center_x, center_y, mean_radius, sigma_radius, num_points): points = [] for theta in np.linspace(0, 2*math.pi - (2*math.pi/num_points), num_points): radius = random.gauss(mean_radius, sigma_radius) x = center_x + radius * math.cos(theta) y = center_y + radius * math.sin(theta) points.append([x,y]) return points

Si no quieres instalar numpy , puedes escribir tu propia versión similar de linspace

def linspace(start, stop, num_steps): values = [] delta = (stop - start) / num_steps for i in range(num_steps): values.append(start + i * delta) return values

No he podido encontrar un artículo o una pregunta de stackoverflow sobre este tema cuando lo necesito.

Estoy haciendo un juego en 2D y quiero generar un asteroide en forma aleatoria. Cada asteroide tiene un centro, una posición X, Y , quiero generar, digamos 8 vértices a su alrededor (el número de vértices es variable)

Si puedo lograr esta forma ahora, quiero agregar un elemento aleatorio, digamos una distancia variable y aleatoria desde el centro para crear una forma de roca aleatoria.

Investigué un concepto de trigonometría llamado Polar a coordenadas cartesianas, pero no he podido averiguar cómo aplicarlo a este objetivo. Aunque hay tutoriales en Javascript, usa bibliotecas y funciones que tendría que hacer en Python desde cero.

EDITAR: Entonces tu respuesta se centra en explicar la fórmula para obtener los vértices en el centro, estas son las cosas que ya sé cómo hacer,

1) Dibuje un polígono en la biblioteca de gráficos que estoy usando 2) Obtenga números aleatorios

¡Muchas gracias de antemano!


Una manera fácil sería elegir al azar uno o dos o tres vértices no adyacentes, y simplemente moverlos una cantidad aleatoria que no sea más que la distancia al vértice más cercano.