High-School Maths - Lecture and Exercise
Отварям темата основно за обсъждане на задачата за чертаене на кръг, защото е малко по-предизвикателна от предходните. Според мен обаче няма смисъл да се правят отделни теми за тези задачки (изключение е може би последната), затова я слагам като обща за лекцията.
Проблем 8.2 - plot_circle()
Ето докъде стигнах с решението на 8-ма задача. Нарочно слагам снимка, а не самото решение, защото смятам, че ще е по-полезно за всички ако обсъждаме подходи и идеи с минимално споделяне на код: https://ibb.co/j5K5bn. Някой ако знае най-кадърния начин да се качи снимка тук да сподели, понеже не помня някога да съм го правил.
Линкът може да изчезне, затова кратко обяснение на резултата от изпълнението на plot_circle(3, 1, 1.5): кръгът е с верни кординати на центъра (3, 1) и правилен радиус (1.5), пропорциите му са правилни визуално, горната и долната половина са с различни цветове (обяснение след малко), а координатните оси са разчленени (т.е. не се пресичат, което е малко грозно).
Решението ми използва написаната в задача 7 функция plot_math_functions(), тъй като окръжността не може да се опише с една функция. По дефиниция функцията съпоставя на всеки аргумент точно една стойност, докато при окръжността се вижда, че за всички стойности на х освен крайните, имаме по две стойности за у. На практика ползвам две функции, които чертаят горната и долната част поотделно, затова са с различни цветове в изходното изображение.
Самите функции могат да се изведат от уравнението на окръжността, което е: (x - x_c)^2 + (y - y_c)^2 = r^2. Коментарът към самата задача е малко подвеждащ, понеже дадената там формула е за окръжност с център в центъра на равнината. При коренуването се получава модулно уравнение; в зависимост от стойността на израза (у - y_c) имаме два случая, които представляват въпросните две функции - y > y_c е горната част на окръжността, а y < y_c е долната.
Допълнително се налага да се уеднаквят пропорциите на координатните оси, защото в противен случай кръгът изглежда като елипса.
Предстои да дооправя нещата (ако мога), въпреки че става дума основно за разкрасяване, което твърде много ми напомня на мъките ми със CSS, та мотивацията ми не е особено висока:
- Цялата окръжност да е в един цвят
- Осите да са съединени
- Да има една нула в центъра, вместо по една за всяка ос (важи и за предходните задачи)
Доста ми е интересно дали някой е избрал/намерил различен начин да реши задачата. Видях, че pyplot има вграден Circle, но ползването на функция, която съм написал в рамките на упражнението, ми се стори по-интересно предизвикателство от четенето на малко документация.
Две отделни задачи са - едната е да начертаеш тригонометричните функции, а другата е за кръга. Има и две отделни клекти за целта, но може би объркването идва от факта, че няма подробни обяснения на втората част.
Аз доколкото намерих решения, arccot(x) = arctan(1/x) е коректно и е доста лесно в случая. По различните източници и софтуери има разминавания, за повече инфо може да погледнеш тук и тук. Разликите идват от разглеждането на cot(x) в ралични интервали, в единия случай от 0 до пи, в другия от -пи/2 до пи/2, което води до различни резултати при чертаенето на аркус котангенс.