Programació Python: Simulació Balística i Gràfics Geomètrics

Clasificado en Diseño e Ingeniería

Escrito el en catalán con un tamaño de 5,79 KB

Aquest document presenta dos projectes de programació en Python. El primer simula la penetració d'una bala a través de capes de material amb diferent duresa. El segon projecte permet dibuixar diverses figures geomètriques (punts, quadrats, rectangles i triangles) en una matriu de caràcters, simulant un entorn gràfic bàsic.

Simulació de Resistència Balística amb Python

Aquesta secció implementa un programa que calcula la potència restant d'una bala després de travessar diverses capes de material. Cada capa té una duresa específica que redueix la potència de la bala.

Codi Python: Simulació de Bala Blindada


potencia = int(input("Potència de la bala: "))
capes = int(input("Quantes capes té el material?: "))
material = []

for capa_idx in range(capes):
    duresa = int(input(f"Duresa de la capa {capa_idx + 1}?: "))
    material.append(duresa)

capa_actual = 0
sortir = False
while not sortir:
    if capa_actual < len(material) and potencia >= material[capa_actual]:
        potencia -= material[capa_actual]
        capa_actual += 1
    else:
        sortir = True

print(f"La bala s'ha quedat amb {potencia} de potència.")
print(f"La bala ha passat per {capa_actual} capes.")
print(f"Li quedaven {len(material) - capa_actual} capes per travessar.")

El programa sol·licita a l'usuari la potència inicial de la bala i el nombre de capes del material. Després, per a cada capa, demana la seva duresa. Finalment, simula el procés de penetració, mostrant la potència final de la bala i quantes capes ha aconseguit travessar.

Dibuix de Figures Geomètriques en Matriu ASCII

Aquesta secció conté un conjunt de funcions en Python per dibuixar figures geomètriques bàsiques (punt, quadrat, rectangle, triangle rectangle) en una matriu bidimensional de caràcters. Aquestes funcions són la base per a una aplicació interactiva de dibuix.

Funcions de Dibuix Geomètric

  • punt(matriu, x, y, caracter): Dibuixa un punt a les coordenades especificades.
  • quadrat(matriu, x, y, mida, caracter): Dibuixa un quadrat amb la mida donada.
  • rectangle(matriu, x, y, mida1, mida2, caracter): Dibuixa un rectangle amb les dimensions especificades.
  • triangle(matriu, x, y, base, caracter): Dibuixa un triangle rectangle amb la base donada.

Codi Python: Definició de Funcions de Dibuix


def punt(matriu, x, y, caracter):
    if y < len(matriu) and x < len(matriu[y]):
        matriu[y][x] = caracter

def quadrat(matriu, x, y, mida, caracter):
    if y + (mida - 1) < len(matriu) and x + (mida - 1) < len(matriu[y]):
        for i in range(mida):
            for j in range(mida):
                matriu[y + i][x + j] = caracter

def rectangle(matriu, x, y, mida1, mida2, caracter):
    if y + (mida1 - 1) < len(matriu) and x + (mida2 - 1) < len(matriu[y]):
        for i in range(mida1):
            for j in range(mida2):
                matriu[y + i][x + j] = caracter

def triangle(matriu, x, y, base, caracter):
    if y + (base - 1) < len(matriu) and x + (base - 1) < len(matriu[y]):
        for i in range(base):
            for j in range(i + 1):
                matriu[y + i][x + j] = caracter

Nota sobre la funció punt: S'ha corregit l'ordre dels índexs de la matriu per assegurar que y es refereix a la fila i x a la columna, d'acord amb la convenció habitual matriu[fila][columna].

Gestió de la Matriu i Interacció amb l'Usuari

Aquesta part del codi inclou funcions per mostrar i esborrar el contingut de la matriu, així com el bucle principal que gestiona la interacció amb l'usuari, permetent-li seleccionar la figura a dibuixar i introduir els seus paràmetres.

Funcions de Visualització i Neteja


def mostrar(matriu):
    for i in range(10):
        fila = ""
        for j in range(9):
            fila += matriu[i][j] + ","
        fila += matriu[i][9]
        print(fila)

def esborrar(matriu):
    for i in range(10):
        for j in range(10):
            matriu[i][j] = " "

La funció mostrar imprimeix la matriu a la consola, separant els caràcters amb comes. La funció esborrar reinicia tota la matriu amb espais en blanc.

Bucle Principal d'Interacció


matriu = []
for i in range(10):
    fila = []
    for j in range(10):
        fila.append(" ")
    matriu.append(fila)

print("Opcions de Dibuix:")
print("  Punt")
print("  Quadrat")
print("  Rectangle")
print("  Triangle")
print("  Sortir")

opcio = input("Quina opció vols (P/Q/R/T/S)?: ").upper()
while opcio != "S":
    x = int(input("Coordenada X: "))
    y = int(input("Coordenada Y: "))
    caracter = input("Caràcter a dibuixar: ")

    if opcio == "P":
        punt(matriu, x, y, caracter)
    elif opcio == "Q":
        mida = int(input("Mida del costat: "))
        quadrat(matriu, x, y, mida, caracter)
    elif opcio == "R":
        mida1 = int(input("Amplada (Mida 1): "))
        mida2 = int(input("Alçada (Mida 2): "))
        rectangle(matriu, x, y, mida1, mida2, caracter)
    elif opcio == "T":
        base = int(input("Longitud de la base: "))
        triangle(matriu, x, y, base, caracter)
    else:
        print("Opció no vàlida. Si us plau, tria P, Q, R, T o S.")

    mostrar(matriu)
    esborrar(matriu)
    opcio = input("Quina opció vols (P/Q/R/T/S)?: ").upper()

El bucle principal inicialitza una matriu de 10x10. Després, presenta un menú a l'usuari i processa la seva entrada, cridant a la funció de dibuix corresponent. Després de cada dibuix, la matriu es mostra i es neteja per a la següent operació.

Entradas relacionadas: