Processing math: 100%

Prijavi problem


Obeleži sve kategorije koje odgovaraju problemu

Još detalja - opišite nam problem


Uspešno ste prijavili problem!
Status problema i sve dodatne informacije možete pratiti klikom na link.
Nažalost nismo trenutno u mogućnosti da obradimo vaš zahtev.
Molimo vas da pokušate kasnije.

Употреба тригонометријских функција

Клупко

Напиши програм који исцртава клупко, тако што исцрта n=500 насумично одабраних тетива једног круга.

У овом задатку ћемо употребити тригонометријске функције sin и cos да бисмо одредили координате тачке на кругу, за познати угао.

 
1
import random, math
2
import pygame as pg
3
import pygamebg
4
5
(sirina, visina) = (400, 400) # otvaramo prozor
6
prozor = pygamebg.open_window(sirina, visina, "Клупко")
7
8
# funkcija nasumično bira tačku sa kruga ciji je centar u (cx, cy),
9
# a poluprečnik je r
10
def nasumicnaTackaNaKrugu(cx, cy, r):
11
    # nasumično biramo ugao u radijanima (između 0 i 2*pi)
12
    ugao = 2 * math.pi * random.random()
13
    # izračunavamo koordinate tačke na osnovu ugla
14
    (x, y) = (cx + r * math.cos(ugao), cy + r * math.sin(ugao))
15
    return (x, y)
16
17
# bojimo pozadinu prozora u belo
18
prozor.fill(???)
19
20
# centar kruga je centar ekrana
21
(cx, cy) = (sirina / 2, ???)
22
# poluprečnik kruga (prečnik je 90% sirine ekrana)
23
r = ??? * (sirina / 2)
24
25
brojDuzi = 500
26
for i in range(brojDuzi):
27
    # temena duzi su dve nasumično odabrane tačke na krugu
28
    (x1, y1) = nasumicnaTackaNaKrugu(cx, cy, r)
29
    (x2, y2) = nasumicnaTackaNaKrugu(cx, cy, r)
30
    # crtamo duz crnom bojom
31
    pg.draw.aaline(prozor, pg.Color("black"), ???, ???, 1)
32
33
# prikazujemo prozor i čekamo da ga korisnik isključi
34
pygamebg.wait_loop()
35

(klupko)

Параметарске криве

Параметарски задане криве су оне код којих се положај сваке тачке (њена x и x координата) може израчунати као функција неког параметра t. На пример, кружница је параметарска крива јер се њена свака тачка може израчунати као x=cos(t), y=sin(t), за t[0,2π). Напиши програм који исцртава криву која је параметарски задата једначинама x=16sin3(t), y=13cos(t)5cos(2t)2cos(3t)cos(4t). Како изгледа добијена крива?

Дефинисаћемо помоћну функцију f која на основу вредности параметра t израчунава пар координата (x, y). Њена имплементација захтева само да унесемо изразе задате у тексту задатка.

Дефинисаћемо и помоћну функцију која за дати интервал [a, b], број тачака његове поделе n и редни број i (између 0 и n) одређује i-ту тачку те поделе. Пошто n тачака дели интервал на n-1 једнаких делова, ту тачку можемо одредити тако што ширину интервала b-a поделимо са n-1 и на леви крај a додамо i тако добијених ширина.

Дефинисаћемо и помоћну функцију која врши прерачунавање координата из класичног математичког координатног система у ком су дефинисане параметарске једначине (он се некада назива координатни систем света) у координатни систем екрана. Координатни почетак система света ћемо ставити у координатни систем екрана, јединичне дужи ћемо скалирати тако да свака заузима k пиксела и променићемо смер раста x координата.

График ћемо нацртати у облику изломљене линије која се састоји од пуно кратких дужи. За сваке две суседне тачке поделе параметарског интервала одредићемо координате одговарајући тачака криве и између њих нацртати дуж. Зато ћемо током рада главне петље памтити координате претходне и текуће тачке криве.

43
 
1
import math
2
import pygame as pg
3
import pygamebg
4
5
(sirina, visina) = (300, 300) # otvaramo prozor
6
prozor = pygamebg.open_window(sirina, visina, "Срце")
7
8
# parametarske jednačine
9
def f(t):
10
    return (16*math.sin(t)**3,
11
            13*math.cos(t)-5*math.cos(2*t)-2*math.cos(3*t)-math.cos(4*t))
12
13
# prevodi koordinate date tačke iz koordinatnog sistema sveta u
14
# ekranski koordinatni sistem
15
def u_ekranske(tacka):
16
    k = 7 # koeficijent skaliranja
17
    ??? # ekstrahujemo x i y iz uređenog para
18
    return (sirina / 2 + k*x, visina / 2 - k*y)
19
20
# izracunava i-tu tacku u podeli intervala [a, b] na n jednako
21
# razmaknutih tačaka
22
def podela_intervala(a, b, i, n):
23
    return ???
24
25
# bojimo pozadinu u belo
26
prozor.fill(pg.Color("white"))
27
# broj tačaka podele
28
n = 100
29
# parametarski interval
30
(a, b) = ???
31
# prethodna tačka
32
prethodna = f(a)
33
for i in range(1, n+1):
34
    # tekuca tačka
35
    tekuca = f(podela_intervala(a, b, i, n))
36
    # crtamo duž između prethodne i tekuće tačke
37
    ???
38
    # prelazimo na narednu duž
39
    prethodna = tekuca
40
41
# prikazujemo prozor i čekamo da ga korisnik isključi
42
pygamebg.wait_loop()
43

(параметарска_крива)

Пронађи на интернету још параметарских једначина које дају интересантне графике и измени програм тако да се они нацртају.