Оптимизация и улучшение кода Python, который моделирует 3D-траекторию брошенного бейсбола - PullRequest
0 голосов
/ 28 декабря 2018

Я работаю над изучением Python, так как считаю, что мне нужно расширять свои знания языков программирования.Прочитав и просмотрев несколько уроков, я разработал базовую программу, которая моделирует бейсбольный мяч, брошенный из кургана кувшинов в домашнюю тарелку с помощью numpy и maplotlib.Поскольку я только начал изучать Python, я не верю, что мой код настолько хорош.

Первое, что я спрашиваю, это предложения по улучшению.Я хотел бы оптимизировать это, прежде чем начать добавлять к нему.Любые предоставленные ссылки или просто общая справка были бы хороши.

Во-вторых, лучше ли использовать matplotlib для этого или есть что-то еще, что вы бы предложили?

В-третьих, я бы хотелчтобы добавить в программу качку, простую полусферу, кто-нибудь может указать мне правильное направление, чтобы продолжить это?

Спасибо, любая помощь / руководство / комментарии приветствуются!

Я включу в свой код функции, которые я хотел бы улучшить.

from mpl_toolkits.mplot3d import axes3d
from mpl_toolkits.mplot3d.art3d import Poly3DCollection
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax1 = fig.add_subplot(111, projection = '3d')

#stike zone
def strike_zone():
    x_zone =        [0,0]
    z_sides =       [1.5, 3.5]
    y_right =       [-1, -1]
    y_right_mid =   [-.333,-.333]
    y_left =        [1,1]
    y_left_mid =    [.333,.333]
    y_sides =       [-1,1]
    z_top =         [3.5,3.5]
    z_mid_top =     [2.833,2.833]
    z_mid_bottom =  [2.167,2.167]
    z_bottom =      [1.5,1.5]
    ax1.plot(x_zone,y_left, z_sides, color = 'r',linewidth = 2) #left side
    ax1.plot(x_zone, y_right, z_sides, color = 'r',linewidth = 2) #right side
    ax1.plot(x_zone, y_right_mid, z_sides, color = 'r',linewidth = 1) #right mid side
    ax1.plot(x_zone, y_left_mid, z_sides, color = 'r',linewidth = 1) #left mid side
    ax1.plot(x_zone, y_sides, z_top, color = 'r',linewidth = 2) #top side
    ax1.plot(x_zone, y_sides, z_mid_top, color = 'r',linewidth = 1) #top middle
    ax1.plot(x_zone, y_sides, z_mid_bottom, color = 'r',linewidth = 1) #bottom middle
    ax1.plot(x_zone, y_sides, z_bottom, color = 'r',linewidth = 2) #bottom side

#Field
def field():
    #FoulLines
    x_Rline = [0,63.5]
    x_Lline = [0,63.5]
    y_Rline = [0,63.5]
    y_Lline = [0, -63.5]
    ax1.plot(x_Rline,y_Rline, color = '#696969')
    ax1.plot(x_Lline,y_Lline, color = '#696969')

    #home plate
    front_line_x = [1.417,1.417]
    front_line_y = [-.71,.71]
    right_side_x = [1.417,.707]
    right_side_y = [.71,.71]
    left_side_x = [1.417,.707]
    left_side_y = [-.71,-.71]
    right_diag_x = [.707,0]
    right_diag_y = [.71,0]
    left_diag_x = [.707,0]
    left_diag_y = [-.71,0]
    ax1.plot(front_line_x,front_line_y, color = 'k', linewidth = 2)
    ax1.plot(right_side_x,right_side_y,color = 'k', linewidth = 2)
    ax1.plot(left_side_x,left_side_y,color = 'k', linewidth = 2)
    ax1.plot(right_diag_x,right_diag_y,color = 'k', linewidth = 2)
    ax1.plot(left_diag_x,left_diag_y,color = 'k', linewidth = 2)

#draw pitch
def draw_pitch():
    x,y,z = np.loadtxt('test.txt', delimiter = '    ', unpack = True)
    ax1.plot(x,y,z,
        color = 'c',
        linewidth = 5.5,
        solid_capstyle = 'round')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...