/* [wxMaxima batch file version 1] [ DO NOT EDIT BY HAND! ]*/ /* [ Created with wxMaxima version 16.04.2 ] */ /* [wxMaxima: comment start ] Grupy przestrzenne w krystalografi Przykład: Jak rachunkiem macierzowym obliczyć działanie osi śrubowej i płaszczyzny ślizgowej na przykładowy punkt © W.J. 2008-2017 (Do użytku w ramach seminarium z KiK) Jest tu przykład jak macierzowo (macierze 3x3) dodać wektor t oraz to samo z macierzami 4x4 (Macierze 4x4 są nieobowiązkowe = dla ciekawskich) [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ load(draw) $ /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ ratprint: false $ /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ fpprintprec:5 $ /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Definiuję przydatne stałe: [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ [ sa: sin(2*%pi/6), ca: cos(2*%pi/6), sa2: sin(2*%pi/3), ca2: cos(2*%pi/3) ]; /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Definiuję funkcję "MOVE", która przesuwa punkt tak by miał zakres każdej współrzędnej <0;1) (="wszystkie do jednej komórki") [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ Move(x):= if x>=2 then x:x-2 elseif x<-2 then x:x+3 elseif x<-1 then x:x+2 elseif x<0 then x:x+1 elseif x>2 then x:x-2 elseif x>1 then x:x-1 else x:x $ /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Definiuję macierze 3x3 dla elementów symetrii [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ L1: matrix( [ 1, 0, 0], [ 0, 1, 0], [ 0, 0, 1]) $ C: matrix( [-1, 0, 0], [ 0,-1, 0], [ 0, 0,-1]) $ Pz: matrix( [ 1, 0, 0], [ 0, 1, 0], [ 0, 0,-1]) $ Py: matrix( [ 1, 0, 0], [ 0,-1, 0], [ 0, 0, 1]) $ Px: matrix( [-1, 0, 0], [ 0, 1, 0], [ 0, 0, 1]) $ Pxy: matrix( [ 0,-1, 0], [-1, 0, 0], [ 0, 0, 1]) $ Pyz: matrix( [ 1, 0, 0], [ 0, 0,-1], [ 0,-1, 0]) $ Pxz: matrix( [ 0, 0,-1], [ 0, 1, 0], [-1, 0, 0]) $ Pmxy: matrix( [ 0, 1, 0], [ 1, 0, 0], [ 0, 0, 1]) $ Pmxz: matrix( [ 0, 0, 1], [ 0, 1, 0], [ 1, 0, 0]) $ Pmyz: matrix( [ 1, 0, 0], [ 0, 0, 1], [ 0, 1, 0]) $ L2z: Pz.C $ L2y: Py.C $ L2x: Px.C $ L2xy: Pxy.C $ L2yz: Pyz.C $ L2xz: Pxz.C $ L2mxy: Pmxy.C $ L2mxz: Pmxz.C $ L2myz: Pmyz.C $ L4x: matrix( [ 1, 0, 0], [ 0, 0,-1], [ 0, 1, 0]) $ L4y: matrix( [ 0, 0, 1], [ 0, 1, 0], [-1, 0, 0]) $ L4z: matrix( [ 0,-1, 0], [ 1, 0, 0], [ 0, 0, 1]) $ A4z: L4z.C $ A4x: L4x.C $ L3z: matrix( [ ca2, -sa2, 0], [ sa2, ca2, 0], [ 0, 0, 1] ) $ Lm3z: L3z.C $ L6z: matrix( [ ca, -sa, 0], [ sa, ca, 0], [ 0, 0, 1] ) $ Lm6z: L6z.C $ /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Wybieram jakiś przykładowy punkt (na niego zadziałam elementem symetrii) [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ Pkt1: matrix([0.1], [0.4], [0.7]); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Definiuję wektory t (będziemy je dodawać do wyniku mnożenia macierzy 3x3 przez punkt) (są tu zdefiniowane wszystkie jakie są potrzebne dla płaszczyzn ślizgowych) [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ tx: matrix([ 0.5],[ 0.0],[ 0.0]); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ ty: matrix([ 0.0],[ 0.5],[ 0.0]); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ tz: matrix([ 0.0],[ 0.0],[ 0.5]); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ txy: matrix([ 0.5],[ 0.5],[ 0.0]); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ txz: matrix([ 0.5],[ 0.0],[ 0.5]); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ tyz: matrix([ 0.0],[ 0.5],[ 0.5]); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ txyz: matrix([ 0.5],[ 0.5],[ 0.5]); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ txmyz: matrix([ 0.5],[-0.5],[ 0.5]); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ txymz: matrix([ 0.5],[ 0.5],[-0.5]); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ tdxy: matrix([ 0.25],[ 0.25],[ 0.00]); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ tdxz: matrix([ 0.25],[ 0.00],[ 0.25]); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ tdyz: matrix([ 0.00],[ 0.25],[ 0.25]); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ tdxyz: matrix([ 0.25],[ 0.25],[ 0.25]); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ tdxmyz: matrix([ 0.25],[-0.25],[ 0.25]); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ tdxymz: matrix([ 0.25],[ 0.25],[-0.25]); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] !!! Przykład działania płaszczyzny n(101), która ma t=(a+b-c)/2 (Pkt1 = punkt startowy; TEMP = wynik działania płaszczyzny; i na koniec wsunięcie do tej samej komórki) !!! [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ Pkt1; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ TEMP: Pxz.Pkt1+txymz; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ matrix( [Move(TEMP[1][1])], [Move(TEMP[2][1])], [Move(TEMP[3][1])] ); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] i to by było na tyle bo inne macierze i wektory t używa się analogicznie ALE zawsze trzeba wiedzieć, który wektor jest do której płaszczyzny [wxMaxima: comment end ] */ /* [wxMaxima: comment start ] !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! [wxMaxima: comment end ] */ /* [wxMaxima: comment start ] Dlatego WYGODNIEJ jest zdefiniować macierze 4x4 bo zawierają już w sobie wektor t [wxMaxima: comment end ] */ /* [wxMaxima: comment start ] Więc teraz definiuję te macierze 4x4 dla nowych elementów symetrii (tymczasem nie wszystkie, w przyszłych wersjach skryptu będą wszystkie) [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ L43y: matrix( [ 0, 0,-1, 0], [ 0,-1, 0, 3/4], [ 1, 0, 0, 0], [ 0, 0, 0, 1] ) ; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ L41z: matrix( [ 0,-1, 0, 0], [ 1, 0, 0, 0], [ 0, 0, 1, 1/4], [ 0, 0, 0, 1]) ; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ L43z: matrix( [ 0,-1, 0, 0], [ 1, 0, 0, 0], [ 0, 0, 1, 3/4], [ 0, 0, 0, 1]) ; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ dxy1: matrix( [ 0,-1, 0, 1/4], [-1, 0, 0,-1/4], [ 0, 0, 1, 1/4], [ 0, 0, 0, 1]) ; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ dxy2: matrix( [ 0,-1, 0,-1/4], [-1, 0, 0, 1/4], [ 0, 0, 1, 1/4], [ 0, 0, 0, 1]) ; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ txmyz; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ Pyz; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ dyz1: matrix( [ 1, 0, 0, 1/4], [ 0, 0,-1, -1/4], [ 0,-1, 0, 1/4], [0, 0, 0, 1] ); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ dyz2: matrix( [ 1, 0, 0, 1/4], [ 0, 0,-1, 1/4], [ 0,-1, 0, -1/4], [0, 0, 0, 1] ); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] W celu używania macierzy 4x4 musimy również punkt opisać macierzą 1x4 !!! => dodajemy wiersz z "1" [wxMaxima: comment end ] */ /* [wxMaxima: comment start ] Najpierw tworzymy nową macierz punktu [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ Pkt1t: matrix( Pkt1[1], Pkt1[2], Pkt1[3], [1] ); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Przykład 1a (był na slajdzie na ćwiczeniach) Działanie płaszczyzny ślizgowej diamentowej o wskaźnikach (011) i o wektorze t=(a+b-c)/4 na nasz przykładowy punkt [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ dyz1; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ TEMP: dyz2.Pkt1t; /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Jak widać "zostaje" czwarty wiersz z tą teraz już zbędną jedynką Usuńmy go (dla przejrzystości) funkcją MOVE [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ matrix( [Move(TEMP[1][1])], [Move(TEMP[2][1])], [Move(TEMP[3][1])] ); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Przykład 1b (był na slajdzie na ćwiczeniach) Działanie płaszczyzny ślizgowej diamentowej o wskaźnikach (110) i o wektorze t=(a-b+c)/4 na nasz przykładowy punkt [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ Pkt1t; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ dxy1; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ Pkt2t: dxy1.Pkt1t; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ matrix( [Move(Pkt2t[1][1])], [Move(Pkt2t[2][1])], [Move(Pkt2t[3][1])] ); /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] a co by było dalej z tym punktem? Zadziałajmy jeszcze 4x tą macierzą [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ Pkt3t: dxy1.Pkt2t; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ matrix( [Move(Pkt3t[1][1])], [Move(Pkt3t[2][1])], [Move(Pkt3t[3][1])]); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ Pkt4t: dxy1.Pkt3t; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ matrix( [Move(Pkt4t[1][1])], [Move(Pkt4t[2][1])], [Move(Pkt4t[3][1])] ); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ Pkt5t: dxy1.Pkt4t; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ matrix( [Move(Pkt5t[1][1])], [Move(Pkt5t[2][1])], [Move(Pkt5t[3][1])] ); /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ Pkt1; /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Jak widać punkt powrócił do polożenia początkowego [wxMaxima: comment end ] */ /* [wxMaxima: comment start ] Przykład 2 Jak zadziała oś L43y na przykładowy punkt (przekształceń jest o jedno za dużo, w celu pokazania, że następuje powrót do położenia początkowego) [wxMaxima: comment end ] */ /* [wxMaxima: comment start ] L43y = oś czterokrotna śrubowa o t=3/4 równoległa do y [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ TEMP: L43y.Pkt1t $ Pkt2: matrix( [Move(TEMP[1][1])], [Move(TEMP[2][1])], [Move(TEMP[3][1])] )$ /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ TEMP: L43y.matrix( Pkt2[1], Pkt2[2], Pkt2[3], [1] ) $ Pkt3: matrix( [Move(TEMP[1][1])], [Move(TEMP[2][1])], [Move(TEMP[3][1])] )$ /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ TEMP: L43y.matrix( Pkt3[1], Pkt3[2], Pkt3[3], [1] ) $ Pkt4: matrix( [Move(TEMP[1][1])], [Move(TEMP[2][1])], [Move(TEMP[3][1])] )$ /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ TEMP: L43y.matrix( Pkt4[1], Pkt4[2], Pkt4[3], [1] ) $ Pkt5: matrix( [Move(TEMP[1][1])], [Move(TEMP[2][1])], [Move(TEMP[3][1])] )$ /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ [Pkt1,Pkt2,Pkt3,Pkt4,Pkt5]; /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Przykład 3 Transformacja współrzędnych punktu za pomocą osi L41z: [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ TEMP: L41z.Pkt1t $ Pkt2: matrix( [Move(TEMP[1][1])], [Move(TEMP[2][1])], [Move(TEMP[3][1])] )$ /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ TEMP: L41z.matrix( Pkt2[1], Pkt2[2], Pkt2[3], [1] ) $ Pkt3: matrix( [Move(TEMP[1][1])], [Move(TEMP[2][1])], [Move(TEMP[3][1])] )$ /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ TEMP: L41z.matrix( Pkt3[1], Pkt3[2], Pkt3[3], [1] ) $ Pkt4: matrix( [Move(TEMP[1][1])], [Move(TEMP[2][1])], [Move(TEMP[3][1])] )$ /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ TEMP: L41z.matrix( Pkt4[1], Pkt4[2], Pkt4[3], [1] ) $ Pkt5: matrix( [Move(TEMP[1][1])], [Move(TEMP[2][1])], [Move(TEMP[3][1])] )$ /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ [Pkt1,Pkt2,Pkt3,Pkt4,Pkt5]; /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! [wxMaxima: comment end ] */ /* [wxMaxima: comment start ] Teraz zróbmy RYSUNEK rozkładu położeń dla osi L43z [wxMaxima: comment end ] */ /* [wxMaxima: comment start ] Najpierw obliczmy współrzędne tych położeń [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ TEMP: L43z.Pkt1t $ Pkt2: matrix( [Move(TEMP[1][1])], [Move(TEMP[2][1])], [Move(TEMP[3][1])] )$ /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ TEMP: L43z.matrix( Pkt2[1], Pkt2[2], Pkt2[3], [1] ) $ Pkt3: matrix( [Move(TEMP[1][1])], [Move(TEMP[2][1])], [Move(TEMP[3][1])] )$ /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ TEMP: L43z.matrix( Pkt3[1], Pkt3[2], Pkt3[3], [1] ) $ Pkt4: matrix( [Move(TEMP[1][1])], [Move(TEMP[2][1])], [Move(TEMP[3][1])] )$ /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ TEMP: L43z.matrix( Pkt4[1], Pkt4[2], Pkt4[3], [1] ) $ Pkt5: matrix( [Move(TEMP[1][1])], [Move(TEMP[2][1])], [Move(TEMP[3][1])] )$ /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ TEMP: L43z.matrix( Pkt5[1], Pkt5[2], Pkt5[3], [1] ) $ Pkt6: matrix( [Move(TEMP[1][1])], [Move(TEMP[2][1])], [Move(TEMP[3][1])] )$ /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ [Pkt1,Pkt2,Pkt3,Pkt4,Pkt5]; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ [ NPkt1: ev(Pkt1,numer), NPkt2: ev(Pkt2,numer), NPkt3: ev(Pkt3,numer), NPkt4: ev(Pkt4,numer), NPkt5: ev(Pkt5,numer), NPkt6: ev(Pkt6,numer) ]; /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] W celu zrobienia rysunku trzeba przesunąć punkty tak żeby leżały nie w tej samej komórce a wokół osi. W tym celu odejmuję 1/2 [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ [ NPkt1[1]: NPkt1[1]-0.5, NPkt2[1]: NPkt2[1]-0.5, NPkt3[1]: NPkt3[1]-0.5, NPkt4[1]: NPkt4[1]-0.5, NPkt5[1]: NPkt5[1]-0.5, NPkt6[1]: NPkt6[1]-0.5 ]$ /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ [ NPkt1[2]: NPkt1[2]-0.5, NPkt2[2]: NPkt2[2]-0.5, NPkt3[2]: NPkt3[2]-0.5, NPkt4[2]: NPkt4[2]-0.5, NPkt5[2]: NPkt5[2]-0.5, NPkt6[2]: NPkt6[2]-0.5 ]$ /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ [ NPkt1[3]: NPkt1[3]-0.5, NPkt2[3]: NPkt2[3]-0.5, NPkt3[3]: NPkt3[3]-0.5, NPkt4[3]: NPkt4[3]-0.5, NPkt5[3]: NPkt5[3]-0.5, NPkt6[3]: NPkt6[3]-0.5 ]$ /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ [ NPkt1, NPkt2, NPkt3, NPkt4, NPkt5, NPkt6 ]; /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ parametry1: [ line_width=1, user_preamble="set size ratio 1", color=black, head_type = 'nofilled, head_length = .05, vector([-1,0],[2.1,0]), text:label(["y",1.1,-0.1]), vector([0,1],[0,-2.1]), text:label(["x",-0.1,-1.1]), implicit( x^2+y^2=1, x,-1.20,1.2, y,-1.2,1.2 ), line_width=2, implicit( (x-1)^2+(y-0)^2=0.0005, x,-1.2,1.2, y,-1.2,1.2 ), implicit( (x-0)^2+(y-1)^2=0.0005, x,-1.2,1.2, y,-1.2,1.2 ), implicit( (x-0)^2+(y+1)^2=0.0005, x,-1.2,1.2, y,-1.2,1.2 ), implicit( (x+1)^2+(y-0)^2=0.0005, x,-1.2,1.2, y,-1.2,1.2 ), implicit( (x-sa)^2+(y-ca)^2=0.0005, x,-1.2,1.2, y,-1.2,1.2 ), implicit( (x-sa2)^2+(y-ca2)^2=0.0005, x,-1.2,1.2, y,-1.2,1.2 ), implicit( (x-ca)^2+(y+sa)^2=0.0005, x,-1.2,1.2, y,-1.2,1.2 ), implicit( (x-ca2)^2+(y+sa2)^2=0.0005, x,-1.2,1.2, y,-1.2,1.2 ), implicit( (x+sa)^2+(y-ca)^2=0.0005, x,-1.2,1.2, y,-1.2,1.2 ), implicit( (x+sa2)^2+(y-ca2)^2=0.0005, x,-1.2,1.2, y,-1.2,1.2 ), implicit( (x+ca)^2+(y-sa)^2=0.0005, x,-1.2,1.2, y,-1.2,1.2 ), implicit( (x+ca2)^2+(y-sa2)^2=0.0005, x,-1.2,1.2, y,-1.2,1.2 ), line_width=1 ] $ /* [wxMaxima: input end ] */ /* [wxMaxima: input start ] */ wxdraw2d( parametry1, if NPkt1[3,1]>0 then color= red else color=blue, if NPkt1[3,1]>0 then implicit( (x-NPkt1[2,1])^2 + (y-(-NPkt1[1,1]))^2=0.005, x,-1.2,1.2, y,-1.2,1.2 ) else implicit( (x-NPkt1[2,1])^2 + (y-(-NPkt1[1,1]))^2=0.002, x,-1.2,1.2, y,-1.2,1.2 ), if NPkt2[3,1]>0 then color= red else color=blue, if NPkt2[3,1]>0 then implicit( (x-NPkt2[2,1])^2 + (y-(-NPkt2[1,1]))^2=0.005, x,-1.2,1.2, y,-1.2,1.2 ) else implicit( (x-NPkt2[2,1])^2 + (y-(-NPkt2[1,1]))^2=0.002, x,-1.2,1.2, y,-1.2,1.2 ), if NPkt3[3,1]>0 then color= red else color=blue, if NPkt3[3,1]>0 then implicit( (x-NPkt3[2,1])^2 + (y-(-NPkt3[1,1]))^2=0.005, x,-1.2,1.2, y,-1.2,1.2 ) else implicit( (x-NPkt3[2,1])^2 + (y-(-NPkt3[1,1]))^2=0.002, x,-1.2,1.2, y,-1.2,1.2 ), if NPkt4[3,1]>0 then color= red else color=blue, if NPkt4[3,1]>0 then implicit( (x-NPkt4[2,1])^2 + (y-(-NPkt4[1,1]))^2=0.005, x,-1.2,1.2, y,-1.2,1.2 ) else implicit( (x-NPkt4[2,1])^2 + (y-(-NPkt4[1,1]))^2=0.002, x,-1.2,1.2, y,-1.2,1.2 ), if NPkt5[3,1]>0 then color= red else color=blue, if NPkt5[3,1]>0 then implicit( (x-NPkt5[2,1])^2 + (y-(-NPkt5[1,1]))^2=0.005, x,-1.2,1.2, y,-1.2,1.2 ) else implicit( (x-NPkt5[2,1])^2 + (y-(-NPkt5[1,1]))^2=0.002, x,-1.2,1.2, y,-1.2,1.2 ), if NPkt6[3,1]>0 then color= red else color=blue, if NPkt6[3,1]>0 then implicit( (x-NPkt6[2,1])^2 + (y-(-NPkt6[1,1]))^2=0.005, x,-1.2,1.2, y,-1.2,1.2 ) else implicit( (x-NPkt6[2,1])^2 + (y-(-NPkt6[1,1]))^2=0.002, x,-1.2,1.2, y,-1.2,1.2 ) ) $ /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Dla sprawdzenia rysunku przywołuję tu poniżej współrzędne tych punktów (jest sześć punktów żeby pasowało do wszystkich osi, dla osi o krotności niższej niż 6 punkty powtarzają się) [wxMaxima: comment end ] */ /* [wxMaxima: input start ] */ [ NPkt1, NPkt2, NPkt3, NPkt4, NPkt5, NPkt6 ]; /* [wxMaxima: input end ] */ /* [wxMaxima: comment start ] Uwaga. Działanie elementu symetrii ilustruje się na kole projekcji tylko dla grup punktowych Więc tu powinien być raczej rzut na podstawę komóki elementarnej (dla osi czterokrotnej powinien to być kwadrat) Zmienię to w przyszłej wersji skryptu a tymczasem myślę, że mimo to rysunek jest zrozumiały (Małe niebieskie kółko oznacza z<0 ale niekoniecznie jednakowe) [wxMaxima: comment end ] */ /* Maxima can't load/batch files which end with a comment! */ "Created with wxMaxima"$