CZĘŚĆ WSPÓLNA PRZESŁANIAJĄCYCH SIĘ FIGUR


Podrozdziały
ANIMACJA RUCHU OKRĘGU NA TLE INNEGO OKRĘGU
CZĘŚĆ WSPÓLNA PRZESŁANIAJĄCYCH SIĘ FIGUR
GWIAZDY PODWÓJNE ZAĆMIENIOWE
ZASTOSOWANIA
ZAKOŃCZENIE

 

Rozpatrując przesłaniające się koła możemy to uczynić np. w języku algebry zbiorów. Jak wiadomo dwa zbiory (koła) są albo rozłączne, bądź też mają część wspólną (koniunkcja zbiorów)[3]. Oczywiście najbardziej będzie nas interesować powierzchnia części wspólnej. Najczęściej jest ona sumą dwóch odcinków kół. Dlatego też zaczniemy najpierw od numerycznego obliczenia pola koła. Zastosujemy tutaj najprostszą z punktu widzenia dydaktycznego metodę całkowania numerycznego. tj. metodę prostokątów. Czytelnikowi pragnącemu pogłębić ten temat proponuję zapoznanie się z metodą trapezów, metodą parabol (Simpsona), czy metodami losowymi np. Monte Carlo[4].

 

Rys. 2

obrazek

 

Listing 2    Program 2

'KRZYWE BLASKU
'POLE KOŁA

Screen 9
Color 4,45:Locate 12,58:Print "x":Locate 2,42:Print "y"  'Komentarz graficzny programu
Window(-320, 175)-(319, -174):Color 3,63
Line (-150,0)-(150,0),40: Line (0,170)-(0,-170),40

Const PI=3.1415926535                                    'Deklarujemy stałe      
Const R=100
Const dx=10                                              'Krok rysunków

Dim As Double x,y,S                                      'Deklarujemy zmienne

S=0

For x=-R TO R Step dx            
        
        y=Sqr(R^2-x^2)
       
        S=(S+2*y*dx)                                     'Sumujemy prostokąty elementarne,
        Line (x,y)-(x,-y):Color 5                        'wykorzystując symetrie koła
        Locate 5,5:'Print "S=";S                         'Wypełnienie koła  

Next
Sleep
End

 

Jak ważna jest wartość kroku rachunków ilustrują Rys 2a-c i tabela:

 

Rys. 2a
dx = 10

obrazek

Rys. 2b
dx = 4

obrazek

Rys. 2c
dx = 1

obrazek

 

W zależności od kroku rachunków uzyskujemy następujące przybliżenia, np. pole koła o jednostkowym promieniu: S = πR2 = π•12.

 

TAB.

dx S π = 3,1415926535897932384626433832795
0,1 3,141640735550
0,01 3,14159264845924
0,001 3,14159265373663
0,0001 3,14159265359196

 

Wykorzystując niektóre instrukcje listingów 1 i 2 tworzymy program, który pozwala kreślić i wyliczać cześć wspólną kół

 

Listing 3    Program 3

'KRZYWE BLASKU                                                            'Wykorzystujemy tutaj znane uczniowi
'POLE WSPÓLNE DLA OBU OKRĘGÓW                                             'ze szkoły średniej równanie okręgu
                                                                          'w postaci ogólnej
                                                                          '(x - x0)2+(y - y0)2 = R2. Do rysowania
Screen 9                                                                  'okręgów używamy zmiennych
Color 1,45:Locate 12,70:Print "x": Locate 2,42:Print "y"                  'y1 i y2. Każdy okrąg składa się
Window(-320, 175)-(319, -174):Color 3,63                                  'z dwóch połówek "+" i "-" y1, y2.
Line (-250,0)-(250,0),40: Line (0,170)-(0,-170),40
 
Dim As Single R
Const R1=100:Const R2=50
R=R1+R2

Const dx=1:Const dy=1
Dim As Double x,y,y1,y2,x0,y0

 x0=150:y0=0            

For x=-R TO R Step dx                                                     'Płaszczyzna jest przeglądana w podwójnej
                                                                          'pętli FOR x, FOR y.
    For y=-R TO R Step dy
        y1=Sqr(R1^2-x^2):y2=Sqr(R2^2-x^2)                                 'W rzeczywistości przy pomocy podwójnej  
                                                                          'pętli jest przeglądane pole prostokąta
        Pset (x,y1),23:Pset (x+x0,y0+y2),4                                'o wymiarach (R1+R2)(R1+R2) - celowe jest  
        Pset (x,-y1),23:Pset (x+x0,y0-y2),4                               'więc wprowadzenie zmiennej R = R1+R2 typu Single.
                                                                          'Rysowanie okręgów
        IF x^2+y^2<R1^2 And (x-x0)^2+(y-y0)^2<R2^2  Then Pset (x,y),7     'Warunek liczenia i kreślenia części wspólnej
                                                                          'okręgów  
    Next
Next

Sleep
End

 

Rys. 3a
obrazek

x0 = 150, y0 = 0
R1 = 100, R2 = 50
Rys. 3b
obrazek


x
0 = 120, y0 = 60
R1 = 100, R2 = 50
Rys. 3c
obrazek

x
0 = 50, y0 = -40
R1 = 100, R2 = 80
Rys. 3d

obrazek

x0 = -40, y0 = 40
R1 = 100, R2 = 40

Rys. 3e

obrazek

x0 = 0, y0 = 0
R1 = 100, R2 = 90

Rys. 3f

obrazek

 

 

x0 = 0, y0 = 20
R
1 = 100, R2 = 80

 

Oznaczmy przez d odległość między środkami okręgów. Wzajemne położenie tych okręgów :

- d > R1 + R2 - okręgi rozłączne,
- d = R1 + R2 - okręgi są styczne zewnętrznie (Rys. 3a),
- |R1 - R2| < d < R1 + R2.- istnieje cześć wspólna, przy czym możemy mówić (umownie) o zakryciu płytkim (shallow eclipse) lub głębokim (deep eclipse) (Rys. 3b, c),
- d = |R1 + R2| - okręgi są styczne wewnętrznie (Rys. 3f),
- d < |R1 + R2| - jeden z okręgów zawiera się w drugim (Rys. 3d),
- d = 0 - okręgi współśrodkowe (Rys. 1e).

 

Łączymy algorytmy programów 1, 2 oraz 3:

 

Listing 4    Program 4

'KRZYWE BLASKU
'RYSOWANIE KRZYWYCH BLASKU

Screen 9
Color 1,45:Locate 12,72:Print "t":Locate 2,42:
Window(-320, 175)-(319, -174):Color 3,63
Line (-250,0)-(250,0),40: Line (0,170)-(0,-5),40

Const R1=100:Const R2=100

Dim As Double x,y,x1,x2,y1,y2,x0,y0,t,S
Color 3,63
R=R1+R2
For t=0 TO 300 Step 60
    
   For x=-R TO R Step 0.001
        
        x0=150:y0=50                                                    'Tworzenie animacji przesłaniania
        vx=1:vy=0
        x0=x0-vx*t:y0=y0-vy*t  
        
        y1=Sqr(R1^2-x^2):y2=1.3*Sqr(R2^2-x^2)
    
        Pset (x,y1),2:Pset (x+x0,y0+y2),4
        Pset (x,-y1),2:Pset (x+x0,y0-y2),4
   
   Next

Next

    R=R1+R2:
    Const dx=1:Const dy=1

FOR t=0 to 500 Step 1
    x0=250:y0=50                                                        'Rysowanie krzywych blasku
    vx=1:vy=0
    x0=x0-vx*t:y0=y0-vy*t:
    
    S=0
    For x=-R To R Step dx
        For y=-R To R Step dy
                                    
           y1=Sqr(R1^2-x^2):y2=Sqr(R2^2-x^2)
           IF x^2+y^2<R1^2 And (x-x0)^2+(y-y0)^2<R2^2 Then S=S+dx*dy
        
        Next
    Next
    Pset(x0,-0.008*S+120),8
  
Next                                                                    'Krzywa blasku

Sleep
End

 

Takie “mechaniczne” połączenie programów z pewnością jest nie do przyjęcia dla informatyka-fachowca. Przecież obydwa programy można zamknąć jakąś wspólną pętlą. Ale proszę jednak pamiętać do kogo jest adresowana ta praca.

 

 


   I Liceum Ogólnokształcące   
im. Kazimierza Brodzińskiego
w Tarnowie

©2019 mgr Jerzy Wałaszek

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji
GNU Free Documentation License.

Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl

W artykułach serwisu są używane cookies. Jeśli nie chcesz ich otrzymywać,
zablokuj je w swojej przeglądarce.
Informacje dodatkowe