Benutzer-Werkzeuge

Webseiten-Werkzeuge


ws1920:cd_u01

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
ws1920:cd_u01 [2020/03/25 16:33]
Zetraeder angelegt
ws1920:cd_u01 [2020/03/25 16:52] (aktuell)
Zetraeder
Zeile 1: Zeile 1:
 ----- -----
  
-====== ​Aktueller ​Code ====== +====== Code: Update 01 ====== 
-**16.01.2020**+**29.01.2020**
  
 [[ws1920:​cd_07|<<​]] | [[ws1920:​scutoids|Home]] | [[ws1920:​update_01|Text]] | [[ws1920:​cd_08|>>​]] [[ws1920:​cd_07|<<​]] | [[ws1920:​scutoids|Home]] | [[ws1920:​update_01|Text]] | [[ws1920:​cd_08|>>​]]
  
 Aktuelle Programmversion Aktuelle Programmversion
 +
 +<code python>
 +
 +# -*- coding: utf-8 -*-
 +"""​
 +Created on Wed Jan 29 09:45:25 2020
 +
 +@author: Lukas
 +"""​
 +
 +
 +import numpy as np
 +import math
 +import turtle
 +import random as rn
 +#import copy
 +
 +turtle.speed(0)
 +turtle.ht()
 +turtle.pensize(1)
 +
 +
 +
 +#   ​VARIABLEN
 +
 +anzahlKerne = 40
 +max_x = 450
 +max_y = 250
 +
 +ger_index = 0
 +
 +
 +#   ​KLASSEN
 +
 +class Gerade(object):​
 +    ov = (0,0)      #Ortsvektor
 +    rv = (0,0)      #​Richtungsvektor
 +    ​
 +    index = 0
 +    ​
 +    kerne = (0,0)   # ​  gibt an, welche Kerne durch die Linie verbunden werden
 +    ​
 +    def __init__(self,​kerne):​
 +        self.kerne = kerne
 +        ​
 +        self.ov = kerne[0]
 +        self.rv = np.subtract(kerne[1],​kerne[0])
 +    ​
 +    def punktAn(self,​k):​
 +        a = self.ov + self.rv*k
 +        return a
 +    ​
 +    def toString():
 +        print("​OV : "​+Gerade.ov+"​ RV : "​+Gerade.rv+"​ Kerne "​+Gerade.kerne)
 +
 +class Kreis(object):​
 +    mp = (0,0)      #   ​mittelpunkt
 +    radius = 0      #   ​radius
 +    ​
 +    epsilon = 0.001
 +    ​
 +    def __init__(self,​ mp, radius):
 +        self.mp = mp
 +        self.radius = radius
 +        ​
 +    def imKreis(self,​p):​
 +        if (abstand(self.mp,​p) < self.radius - self.epsilon):​
 +            return True
 +        else: return False
 +        ​
 +    def zeichne(self):​
 +        turtle.penup()
 +        turtle.goto((self.mp[0],​self.mp[1]-self.radius))
 +        turtle.pendown()
 +        turtle.circle(self.radius)
 +        ​
 +class Dreieck(object):​
 +    p = []          #   ​Punkte,​ die das Dreieck bilden
 +    g = []          #   ​Geraden,​ die das Dreieck bilden
 +    mp = (0,0)      #   ​Mittelpunkt,​ der aus diesem Dreieck hervorgeht
 +    #uk = Kreis((0,​0),​0) ​          # ​  ​umkreis des Dreiecks
 +    ​
 +    def __init__(self,​p):​
 +        self.p = p
 +        self.mp = self.mittelpunkt()
 +        self.g = self.genGeraden()
 +        ​
 +        #self.g = [Gerade((self.p[0],​self.p[1])),​ Gerade((self.p[1],​self.p[2])),​ Gerade((self.p[0],​self.p[1]))]
 +        ​
 +        #self.uk = self.umkreis
 +        ​
 +    def zeichne(self):​
 +        zeichneLinie(self.p[0],​self.p[1])
 +        zeichneLinie(self.p[1],​self.p[2])
 +        zeichneLinie(self.p[2],​self.p[0])
 +    ​
 +    def genGeraden(self):​
 +        g1 = Gerade((self.p[0],​self.p[1]))
 +        g2 = Gerade((self.p[1],​self.p[2]))
 +        g3 = Gerade((self.p[2],​self.p[0]))
 +        ​
 +        ger = [g1,g2,g3]
 +        return ger        ​
 +    ​
 +    def mittelpunkt(self):​
 +        #   soll zuerst die Geraden des Dreiecks ermittlen
 +        g1 = Gerade((self.p[0],​ self.p[1]))
 +        g2 = Gerade((self.p[1],​ self.p[2]))
 +        ​
 +        g1.ov = g1.ov + .5*g1.rv
 +        g2.ov = g2.ov + .5*g2.rv
 +        ​
 +        g1.rv = rechtW(g1.rv)
 +        g2.rv = rechtW(g2.rv)
 +        ​
 +        mitte = schnittPunkt(g1,​g2)  ​
 +        ​
 +        return mitte
 +        ​
 +        #   ​ermittelt Abstand Mittelpunkt - Eckpunkt -> Radius
 +        ​
 +    def umkreis(self):​
 +        a = abstand(self.mp,​self.p[0])
 +        u = Kreis(self.mp,​a)
 +        ​
 +        return u
 +
 +#   ​FUNKTIONEN
 +
 +def generiereKernListe(n,​maxx,​maxy):​
 +    #   ​generiert eine Liste von Punkten im R^2
 +    liste=[]
 +    ​
 +    for c in range(n):
 +        x = rn.randint(-maxx,​maxx)#​rn.uniform(0,​maxx)
 +        y = rn.randint(-maxy,​maxy)#​rn.uniform(0,​maxy)
 +        ​
 +        liste.append((x,​y))
 +        ​
 +    return liste
 +
 +def abstand(p1,​p2):​
 +    return math.sqrt((p2[0]-p1[0])**2+(p2[1]-p1[1])**2)
 +
 +def rechtW(v):
 +    #   ​findet einen Vektoren im rechten Winkel zu dem gegebenen Vektor
 +    v_neu = np.array((-v[1],​v[0]))
 +    return v_neu
 +
 +def zeichneLinie(start,​ende):​
 +    #   ​zeichnet eine Linie zwischen start und ende mithilfe einer turtle
 +    turtle.penup()
 +    turtle.goto(start)
 +    turtle.pendown()
 +    turtle.goto(ende)  ​
 +    ​
 +def zeichnePunkt(pos):​
 +    turtle.penup()
 +    turtle.goto(pos[0]-5,​pos[1]-5)
 +    turtle.pendown()
 +    turtle.goto(pos[0]+5,​pos[1]-5)
 +    turtle.goto(pos[0]+5,​pos[1]+5)
 +    turtle.goto(pos[0]-5,​pos[1]+5)
 +    turtle.goto(pos[0]-5,​pos[1]-5)
 +    turtle.penup()
 +
 +def schnittTest(g1,​g2):​
 +    #   ​testet,​ ob g1 und g2 sich schneiden
 +    return np.linalg.solve([[g2.rv[0],​-g1.rv[0]],​[g2.rv[1],​-g1.rv[1]]],​[[g1.ov[0]-g2.ov[0]],​[g1.ov[1]-g2.ov[1]]])
 +
 +def schnittPunkt(g1,​g2):​
 +    z = schnittTest(g1,​g2)
 +    k = g2.punktAn(z[0][0])
 +    #​zeichnePunkt(k)
 +    return k
 +
 +#c = circle((0,​1),​5)
 +    ​
 +    ​
 +    ​
 +    ​
 +#   ​PROGRAMM
 +    ​
 +ker = generiereKernListe(anzahlKerne,​max_x,​max_y)
 +drei = []
 +
 +for i in ker:
 +    zeichnePunkt(i)
 +
 +for i in range(0,​len(ker)):​
 +    for j in range(i+1,​len(ker)):​
 +        for k in range(j+1,​len(ker)):​
 +            d = Dreieck([ker[i],​ker[j],​ker[k]])
 +            #d.g = [Gerade((ker[0],​ker[1])),​ Gerade((ker[1],​ker[2])),​ Gerade((ker[0],​ker[1]))]
 +            ​
 +            frei = True
 +            ​
 +            for l in ker:
 +                if(d.umkreis().imKreis(l) == True):
 +                    frei = False
 +            ​
 +            if (frei == True):
 +                drei.append(d)
 +
 +for d in drei:
 +    turtle.pensize(1)
 +    turtle.color("​gainsboro"​)
 +    d.umkreis().zeichne()
 +    turtle.color("​mediumspringgreen"​)
 +    turtle.pensize(2)
 +    d.zeichne()
 +
 +
 +
 +turtle.color("​dimgrey"​)
 +turtle.pensize(3)
 +
 +#for m in drei:
 +#    print(m.g[0].ov,"​\n"​)
 +#    print(m.mp,"​\n"​)
 +
 +for m in drei:
 +    for n in drei:
 +        if (m != n):
 +            #​print(m.g[0],"​ and ", n.g)
 +            ​
 +            if (m.g[0].kerne in n.g[0].kerne):​print("​yes"​)
 +            nachbarn = False
 +            ​
 +            for o in m.g:
 +                for p in n.g:
 +                    if ((o.kerne[0] in p.kerne) and (o.kerne[1] in p.kerne)):
 +                        nachbarn = True
 +            ​
 +            if (nachbarn == True):
 +                zeichneLinie(m.mp,​ n.mp)
 +            ​
 +            #if (((m.g[0].kerne[0] and m.g[0].kerne[1]) in n.g[0].kerne) or (m.g[1] in n.g) or (m.g[2] in n.g)): ​               ​
 +            #    zeichneLinie(m.mp,​ n.mp)
 +
 +
 +#d = Dreieck([ker[0],​ker[1],​ker[2]])
 +#​d.zeichne()
 +#​zeichnePunkt(d.mp)
 +
 +#​zeichnePunkt(mitteAusDreieck(d))
 +
 +
 +
 +#for i in range(1,​len(ker)):​
 +#    zeichneLinie(ker[i-1],​ker[i])
 +#​zeichneLinie(ker[0],​ker[len(ker)-1])
 +
 +
 +
 +
 +turtle.Screen().exitonclick()
 +
 +</​code>​
ws1920/cd_u01.1585150395.txt.gz · Zuletzt geändert: 2020/03/25 16:33 von Zetraeder