Вход | Регистрация

Трета задача

  • Това е темата за въпроси по трета задача. Тук е и мястото да запълните дупките в знанията си по аналитична геометрия.

    15.04.2010
  • Или тепърва да добием въпросните знания...

    15.04.2010
  • Примерен тест файл ще има ли?

    15.04.2010
  • Да, утре по някое време ще се появи.

    Миналата година имаше традиция студентите да си разменят тестове.

    16.04.2010
  • Може ли да качите и Лекция 10 в материалите?

    16.04.2010
  • Аз искам да питам при унарните и бинарните оператори за вектори променен self ли трябва да връщаме или нов вектор?

    16.04.2010
  • @Кирил Владимиров: Нещата не са сложни. Най-малкото - в понеделник ще напишем примерен код на лекцията.

    @Кирил Кирилов: На път е.

    @Йолина: Ще се появи в някакъв момент... скоро.

    @Александрина: По принцип винаги трябва да връщате нов обект при + - * / и т.н.. Няма логика тези оператори да променят аргументите си. Пример: Когато конкатенираш два списъка [1,2,3] + [4,5] - не очакваш някой от тях да се промени. Това, разбира се, не важи само за конкретната задача, а предефиниране на аритметичните оператори въобще. И не само в Питон, а за всякакви езици.

    Изключение от правилото е унарния оператор +  (това е логично, тъй като той обикновено просто връща self/this/me без да го променя).

    Друго изключение са += -= *= /= и т.н., но при тях е друга история... там зависи дали искате обектите да са mutable или immutable. В конкретния случай оставяйте на езика сам да дефинира тези оператори.

    Забележка: това са добри практики, но винаги сте свободни да направите нещо коренно различно. Някой може да се направи на интересен и да реши да прави вход и изход с побитови операции, например.

    17.04.2010 (променeно 17.04.2010)
  • Thumbs_up

    Примерният тест е вече на линия.

    Днес ще качим липсващите презентации.

    17.04.2010
  • "@Александрина: По принцип винаги трябва да връщате нов обект при + - * / и т.н.. Няма логика тези оператори да променят аргументите си. Пример: Когато конкатенираш два списъка [1,2,3] + [4,5] - не очакваш някой от тях да се промени. Това, разбира се, не важи само за конкретната задача, а предефиниране на аритметичните оператори въобще. И не само в Питон, а за всякакви езици."

    Това означава ли че 3 * (1, 2) връща нов обект? Струва ми се, че в лекцията пишеше, че е добре да не се създава нов обект, а да се променят агументите на стария. Разбира се, може и да не съм разбрала правилно...

    Същото ще важи и за (1, 2) * (1, 3), (1, 2) + (1, 3), предполагам.

    17.04.2010
  • Темата на задачата е супер :D

    18.04.2010
  • @Елена Иванова:
    Ако имаш:

    c = a [+-/*] b

    self ти е "а" и няма смисъл да го променяш. Дори по стандартната семантика на тези операции това би било грешно. Връщаш си нов обект.

    Ако имаш:

    c [+-/*]= a

    self ти е "c" и тука вече е въпрос на избор дали да връщаш нов обект или да промениш self и да "return self" накрая. В 99.99% няма значение кое от двете се прави (освен ако примерно конструктора на този тип не е супер бавен и не записва 5GB файл на другия край на света...)

    @Лекторите:
    Между другото, има дребна грешка в условието на Права. В последната точка пише "l.colinear_vector()", а collinear се пише с 2 "l". Дреболия, но е в името на функция и може да станат обърквания накрая.

    18.04.2010 (променeно 18.04.2010)
  • Какво е разстоянието между 2 безкрайни точки? Между безкрайна и крайна точка? Какво става с разстоянието между точка и права ако едно от двете е безкрайно?

    18.04.2010 (променeно 18.04.2010)
  • @Петко Василев: collinear се пише още colinear и co-linear, всички са верни.

    18.04.2010
  • Бинарен оператор \ , делящ вектор на число. Тук всъщност се има предвид Бинарен оператор /, нали?

    П.С. Хмм, как да го форматирам, така че `/` да се показва правилно (highlight-нато '/')?

    18.04.2010 (променeно 18.04.2010)
  • Във vect.scaled(number) вектора който се връща, какво точно трябва да е? Кординатите на стария вектор умножени по число? или самият ветор умножен по число?

    18.04.2010
  • "Конструкор Line(a, b), приемащ 2 точки или вектор и точка."

    Това какво означава? Че трябва конструкторът ми да прави и двете (да конструира и по 2 точки, и по точка и вектор) или само едното в зависимост как съм избрала да представям правата?

    Нали имате предвид, че векторите нямат хомогенни координати? Поне нас така ни учат. Казвате, че представяме разширената евклидова равнина, а в нея няма вектори. Това супер много ме обърква кога трябва да минавам в нехомогенни координати и кога не. Да се конструира права с хомогенни координати по даден вектор...странна работа...

    И още нещо. Да смятаме ли, че нулевият вектор (0, 0) е успореден и перпендикулярен на безкраината права? Или ако ми се подаде безкрайната права на тези функции...какво да правя?

    18.04.2010
  • @Иван: Резултатът не е ли еднакъв? Вектор, умножен с число, връща вектор, чиито кординати са умножени по това число.

    18.04.2010 (променeно 18.04.2010)
  • при точката, когато z = 0 какви стойности получават х и у ? Освен това, при сравняване на два вектора, това ли имахте предвид а(х1,у1,z1) и b(х2,у2,z2) ,то a==b ако х1==х2*с и.т.н.?

    18.04.2010 (променeно 18.04.2010)
  • При методa за векторите isnormalized ако имаме вектор (0,0) False ли връщаме или хвърляме exception? Също и за методите iscollinear и isnormal ако някой от тях е (0,0)?

    18.04.2010
  • @Ясен Банчев:
    Проблема е, че във Вектор има функция iscollinear(vect2), в която е написано с "ll". Ако беше и на двете места еднакво, нямаше да забележа изобщо, обаче така някак си ми намирисва на грешка.

    18.04.2010 (променeно 18.04.2010)
  • @Петко Василев: Както каза Ясен - и двете са верни :) Съжаляваме за неконсистентността. Няма да поправяме условието, защото объркването ще е по-голямо и ще стане по-зле.

    @Виктор Карагяуров Мерси за забележката. Някой го е оправил...

    @Иван Янакиев: При търсене на разстояние, ако едно от двете е бекзкрайна точка или безкрайната права - хвърляйте GeometricError.

    @Александрина Славова:

    "Конструкор Line(a, b), приемащ 2 точки или вектор и точка." Това какво означава? Че трябва конструкторът ми да прави и двете (да конструира и по 2 точки, и по точка и вектор) или само едното в зависимост как съм избрала да представям правата?

    Конструкторът трябва да може да прави и двете.

    Нали имате предвид, че векторите нямат хомогенни координати? Поне нас така ни учат. Казвате, че представяме разширената евклидова равнина, а в нея няма вектори. Това супер много ме обърква кога трябва да минавам в нехомогенни координати и кога не.

    Затова в условието векторите се създават по (x,y), а точките по (x,y,z)

    Да се конструира права с хомогенни координати по даден вектор... странна работа...

    По точка и вектор ще създавате само прави, които не са безкрайни прави. А уравненията на не-безкрайни прави са еднакви в хомогенни и не-хомогенни координати... не е такъв проблем.

    И още нещо. Да смятаме ли, че нулевият вектор (0, 0) е успореден и перпендикулярен на безкраината права? Или ако ми се подаде безкрайната права на тези функции...какво да правя?

    В условието няма метод проверяващ дали права и вектор са успоредни. В случаите, в които се иска нормален или колинеарен вектор на безкрайната права - хвърляте изключение. А иначе за вектора (0,0)...

    @Иво Стоянов:

    При методa за векторите isnormalized ако имаме вектор (0,0) False ли връщаме или хвърляме exception?

    Връщайте False

    Също и за методите iscollinear и isnormal ако някой от тях е (0,0)?

    Нулевия вектор е едновременно колинеарен и перпендикулярен на всички.

    @Иван Петров:

    при точката, когато z = 0 какви стойности получават х и у ?

    Когато z=0, x и y са си толкова колкото са си.

    Освен това, при сравняване на два вектора, това ли имахте предвид а(х1,у1,z1) и b(х2,у2,z2) ,то a==b ако х1==х2*с и.т.н.?

    Това, което си написал е вярно за точки - а не за вектори. Векторите си имат само два координата (x,y) и са равни само когато и двата координата са равни.

    19.04.2010 (променeно 19.04.2010)
  • @Елена

    Това означава ли че 3 * (1, 2) връща нов обект? Струва ми се, че в лекцията пишеше, че е добре да не се създава нов обект, а да се променят агументите на стария. Разбира се, може и да не съм разбрала правилно...

    Същото ще важи и за (1, 2) * (1, 3), (1, 2) + (1, 3), предполагам.

    А, моля те. Сто пъти казахме, че обикновено е по-добре обектите да са immutable, демек, да се създава нов. Ако някъде в наша лекция пише другояче, ще се радваме да ни покажеш, за да корегираме тази грешка.

    19.04.2010 (променeно 19.04.2010)
  • @ Йоан

    Имах предвид за точки. sorry :)

    19.04.2010 (променeно 19.04.2010)
  • >(забележка: точките (x, y, z) и (cx, cy, c*z) съвпадат, за всяка реална константа c )

    Може ли малко разяснение. Примерно точките (3,5) и (6,10) са две различни точки и според мене не съвпадат. Май абс. не разбирам примера и в момента пиша глупости ;]

    19.04.2010 (променeно 19.04.2010)
  • Точките ги задаваш с хомогенни координати, като z ти показва дали дадената точка е безкрайна или не. Ако не е безкрайна, т.е. ако z != 0, точката (x, y, z) може да бъде представена в нехомогенни координати (x', y'), където x' = x/z, a y' = y/z.В този случай, ако имаш две точки, които имат пропорционални координати и не са безкрайни, те съвпадат: Пример: (3, 5, 1) и (6, 10, 2) имат нехомогенни координати съответно (3, 5) и.. (3, 5), значи съвпадат.

    А що се отнася до безкрайните точки с пропорционални координати, т.е. тези, чиято координата z = 0, не съм сигурна какво точно е положението и не мога да го обясня, но явно и те се считат за една и съща точка.

    19.04.2010 (променeно 19.04.2010)