Ruimtemeetkunde: vectoren en coördinaten (uitgewerkt voorbeeld)

Inleiding

We beginnen met ons project ruimtemeetkunde. We geven via deze oefening een uitgewerkt voorbeeld van een paar eerste functies.

Ons doel blijft om een programma te schrijven dat ruimtemeetkundevraagstukken voor ons oplost. Om dit te doen zorg je éérst voor een goede structuur op jouw computer:

Theorie

In de lessen wiskunde leer je vrij vroeg:

\[\begin{equation} \vec{AB}=\vec{B}-\vec{A} \end{equation}\]

alsook een aantal formules:

\[\begin{equation} \vec{M}=\frac{\vec{A}+\vec{B}}{2} \end{equation}\] \[\begin{equation} \vec{Z}=\frac{\vec{A}+\vec{B}+\vec{C}}{3} \end{equation}\] \[\begin{equation} \vec{Z}=\frac{\vec{A}+\vec{B}+\vec{C}+\vec{D}}{4} \end{equation}\] \[\begin{equation} \vec{P}=\frac{\vec{P_{1}}-k\vec{P_{2}}}{1-k} \quad \quad (k\neq1) \end{equation}\]

voor respectievelijk de puntvector \(\vec{M}\) van het midden van \([AB]\), de puntvector \(\vec{Z}\) van het zwaartepunt van \(\Delta ABC\), de puntvector \(\vec{Z}\) van het zwaartepunt van het viervlak \(ABCD\) en de puntvector van een punt \(P\) met deelverhouding \(k\) t.o.v. een gegeven puntenkoppel \((P_{1}, P_{2})\).

In wat volgt programmeren we een aantal functies die deze zaken voor ons uitrekenen. We stellen zowel punten als vectoren voor als lists met 3 elementen.

Oefening

De opgave is om in 1 Python bestand de functies

vector_AB(A, B)
midden_lijnstuk(A, B)
zwaartepunt_driehoek(A, B, C)
zwaartepunt_viervlak(A, B, C, D)
punt_met_deelverhouding(k, P1, P2)

te schrijven. Ze rekenen bovenstaande formules uit. Voor deze oefening krijg je de oplossing al gegeven, ga er eens door met de oplossing bij, vanaf de volgende oefening ga je zelf gelijkaardige functies moeten schrijven.

Belangrijk: typ de programma’s zelf uit. Je ze gewoon kunnen copy-pasten, maar dan leer je er niets uit.

Programma’s

# Returnt vector AB = B - A
def vector_AB(A, B):
    xa, ya, za = A
    xb, yb, zb = B
    return [xb - xa, yb - ya, zb - za]


# Returnt het middenpunt M van het lijnstuk [AB]
def midden_lijnstuk(A, B):
    xa, ya, za = A
    xb, yb, zb = B
    return [(xa + xb) / 2, (ya + yb) / 2, (za + zb) / 2]


# Returnt het zwaartepunt Z van driehoek ABC
def zwaartepunt_driehoek(A, B, C):
    xa, ya, za = A
    xb, yb, zb = B
    xc, yc, zc = C
    return [(xa + xb + xc) / 3, (ya + yb + yc) / 3, (za + zb + zc) / 3]


# Returnt het zwaartepunt Z van viervlak ABCD
def zwaartepunt_viervlak(A, B, C, D):
    xa, ya, za = A
    xb, yb, zb = B
    xc, yc, zc = C
    xd, yd, zd = D
    return [(xa + xb + xc + xd) / 4, (ya + yb + yc + yd) / 4, (za + zb + zc + zd) / 4]


# Returnt het punt met gegeven deelverhouding k tov een koppel gegeven punten.
def punt_met_deelverhouding(k, P1, P2):
    x1, y1, z1 = P1
    x2, y2, z2 = P2
    return [(x1 - k*x2) / (1 - k), (y1 - k*y2) / (1 - k), (z1 - k*z2) / (1 - k)]