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

Трета задача

  • Line(a,b,c) е мой пропуск. Тъй като работим в хомогенни координати, реших да го добавя (става на 2 реда, а и улеснява някои неща). После се сетих, че не се изисква и го изтрих от секцията с тестването на конструкторите, но явно толкова ми е акъла и забравих, че го използвам във всички други тестове...

    За нулевия вектор: Предполагам, че съм объркал. Лично според мен това "Нулевия вектор е едновременно колинеарен и перпендикулярен на всички" не е така, обаче това е въпрос на дефиниция и не си заслужава да се спори.

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

    21.04.2010 (променeно 21.04.2010)
  • @Атанас

    [...] в условието пише при подаване на вектор(0, 0) за нормализиране да хвърля ГеометричнаГрешка, а след това Йоан мисля отговаря на някой задал въпрос че въпросната функция трябва да връща false. Моля за пояснение по този въпрос.

    Това за геометричната грешка е за Vector(0, 0).normalized().
    Това с False е за Vector(0,0).isnormalized()

    Още едно въпросче: Вярно ли е ако имаме a = Vector(1, 1) a.normalized().length() да ни връща 0.9999999999999999

    Не е проблем. Това е напълно очаквано (друг е въпроса дали е вярно).

    @Йолина:

    Искам да попитам метода __repr__ за точка какво всъщност трябва да изведе (колко координати)? Например: Point(1,2,1) ще изведе Point(1,2,1) или Point(1,2)

    Няма значение. Важното е, като дадеш низа на eval, да инстанцира подходящ обект.

    @Виктор:

    Аз имам въпрос относно финалния тест върху решенията ни. Ще се правят ли проверки тип assertRaises на други класове освен GeometricError (например ZeroDivisionError, AttributeError). Аз лично навсякъде където може да гръмне програмата ми (недефинираните случаи) съм настроил да вика GeometricError, така че ще е добре да знам дали трябва да разкарам тази функционалност.

    Само за GeometricError ще проверяваме.
    Иначе - няма лошо, стига да не си прекалил :)

    @Димитър:

    Конструкор Line(a, b), приемащ 2 точки или вектор и точка да го разбираме като ... Line( Vector( v1,v2 ), Point( p1,p2,p3 ) ) или като Line( Point( p1,p2,p3 ), Vector( v1,v2 ) ) Или пък като двете..

    Като двете.
    Също така има и трето: Line(Point(x1,y1,z1), Point(x2,y2,z2))

    ... никой въпрос не е пропуснат, надявам се...

    21.04.2010 (променeно 21.04.2010)
  • Добавка... в горните ми тестове май има грешка - Безкрайна права и Крайна права май са успоредни (пресичат се в безкрайна точка) Някой ако може да потвърди :)

    21.04.2010
  • Различаваме ли две безкрайни точки, т.е верни ли са следните неща:

    self.assertEqual(Point(0,6,0), Point(0,3,0))

    self.assertEqual(Point(0,3,0), Point(0,3,0))

    self.assertNotEqual(Point(3,0,0), Point(0,3,0))

    self.assertNotEqual(Point(3,5,0), Point(3,4,0))

    21.04.2010 (променeно 21.04.2010)
  • Тези, които не са учили изчислителна геометрия, могат да се ориентират с тази проста библиотека на С -> http://www.math.bas.bg/bantchev/geom/ - има и кратко описание на методите.

    21.04.2010
  • Дали има възможност да увеличите срока до петък следобяд/привечер? Тази седмица имах изпит и контролно и ми предстои още едно. :)

    21.04.2010
  • Така е да - тази седмица беше голям ръш :) И аз няма да откажа, ако се удължи малко.

    21.04.2010
  • И все пак тая задача тества повече познания по аналитична геометрия отколкото ООП. И аз съм за удължаване на срока.

    21.04.2010 (променeно 21.04.2010)
  • И все пак тая задача тества повече познания по аналитична геометрия отколкото > ООП. И аз съм за удължаване на срока.

    Даже направо почти и само аналитична геометрия проверяваме дали знаем, а не езиковите възможности на Python

    21.04.2010
  • И аз бях зает с други контролни и също съм за удължаване на срока.

    21.04.2010 (променeно 21.04.2010)
  • Аз съм ПРОТИВ удължаване на срока.На всички седмицата е тежка.Някои си разпределиха времето,така че да имат време да напишат програмата и да научат за контролните.Не е честно спрямо тези хора.Както не е честно и да искате удължаване в последния ден.

    П.С.Не виждам проблема в това да се тестват познания по геометрия.Миналата година аналогичното домашно е било на кватерниони,което е много по-лошо от това,което имаме в момента.

    21.04.2010 (променeно 21.04.2010)
  • Задачата упражнява уменията ни за писане на класове в Python, нещо което е ново за голяма част от курса, като в същото време те кара да си припомниш/научиш някои работи от училище. Не мога да видя, как някой може да е недоволен, от добрата тема за домашна работа, която получихме. Поздравления за съставилия я.

    21.04.2010
  • Какво трябва да правим когато си строим права по нулев вектор и точка? Хвърляме exception или приемаме, че нулевия вектор е всъщност точка (0,0)??

    21.04.2010
  • какво трябва да правим и като искаме да си построим права по 2 точки едната от които безкрайна?

    и още нещо : self.x = -0.707106781187 other.x = -0.707106781187 self.x == other.x -> False

    Защо се получава така ???

    21.04.2010 (променeно 21.04.2010)
  • Ще има ли тестове за конструиране на даден обект без подадени аргументи, с повече или по-малко? Например Point(), Point(1), Point(1,1,1,1). И друг въпрос. Когато имаме некоректен аргумент в метод, например iscollinear, GeometricError ли вдигаме или връщаме False. Например vect.iscollinear(1).

    21.04.2010 (променeно 21.04.2010)
  • @Йолина: В условието пише да хвърляш изключение

    @Филип: По принцип е същото като строене по точка и вектор

    21.04.2010 (променeно 21.04.2010)
  • @Димитър:

    Добавка... в горните ми тестове май има грешка - Безкрайна права и Крайна права май са успоредни (пресичат се в безкрайна точка) Някой ако може да потвърди :)

    Подозирам, че си прав. Но няма да го тестваме. Може и да се хвърли изключение.

    @Антон:

    Различаваме ли две безкрайни точки, т.е верни ли са следните неща:
    self.assertEqual(Point(0,6,0), Point(0,3,0))
    self.assertEqual(Point(0,3,0), Point(0,3,0))
    self.assertNotEqual(Point(3,0,0), Point(0,3,0))
    self.assertNotEqual(Point(3,5,0), Point(3,4,0))

    Да, верни са.

    @Филип:

    self.x = -0.707106781187 other.x = -0.707106781187 self.x == other.x -> False Защо се получава така ???

    Заради floating point аритметиката е. Обикновено float-ове се сравняват като a-b < ε. Където ε е някакво много малко число.

    @Иван:

    Ще има ли тестове за конструиране на даден обект без подадени аргументи, с повече или по-малко? Например Point(), Point(1), Point(1,1,1,1).

    Само с 2 или 3 аргумента ще се създават (обърни внимание на конструктора в условието)

    Когато имаме некоректен аргумент в метод, например iscollinear, GeometricError ли вдигаме или връщаме False. Например vect.iscollinear(1).

    Логичното е да ползвате TypeError. Той е за тази цел. Но няма да тестваме за това.

    Относно удължаването на срока - най-вероятно няма да има такова. Ще го обсъдим още веднъж, но не разчитайте на това.

    21.04.2010 (променeно 21.04.2010)
  • Имам малък проблем със публикуването на решението си.

    http://fmi.py-bg.net/tasks/9/my_solution/edit

    The change you wanted was rejected.

    Maybe you tried to change something you didn't have access to.

    Във темата за 2-ра задача някой имаше подобен проблем но не пишеше дали е разрешен. Някой да може да помогне :-) ?

    п.с. Мисля че записвам курса за 2-ри път във суси можеби това е проблема?

    21.04.2010 (променeно 21.04.2010)
  • /офтопик

    # Бинарен оператор * , умножаващ вектор по число (забележка: векторите могат да се умножават скаларно и по други вектори)

    # Метод vect.scaled(number), връщащ нов вектор, който отговаря на вектора vect умножен с числото number.

    Има ли смисъл от scaled ?

    21.04.2010
  • Точка с координати 0 0 0 е безсмислена, първоначално реших да хвърлям грешка

    Но от друга страна е съвсем логично да я ползваме в такъв контекст: Line (Point(1,1,0), Point(0,0,0))

    Не намирам друг сценарий, в който може да е полезна обаче.

    Въпрос: Според условието на задачата грешно ли е да хвърлям изключение при конструиране на такава точка, при положение че съществува сценарии, според който изключение не трябва да се хвърля ?

    21.04.2010
  • Thumbs_up

    Така погледнато няма да ти трябва понеже безкрайната права е единствена и през кои да е 2 безкрайни точки. Освен това на много места (вкл. Уикипедия) ще видиш че по дефиниция (0, 0, 0) не е "валидна" точка. Тъй че е нормално да хвърляш изключение

    21.04.2010
  • Да, именно, за това ставаше дума. Мерси

    21.04.2010 (променeно 21.04.2010)
  • Модифициран тест на Димитър Петков, така че да е по-независим от имплементацията (излишното според мен съм го коментирал):

    http://pastebin.com/DRmQTJ8T

    21.04.2010 (променeно 21.04.2010)
  • имам въпрос: ако си представяме точките във Point като self.x = x/z; self.y = y/z при z != 0 ще тествате ли с подобен тест: self.assertEqual(eval(repr(Point(2, 4, 2))), Point(2, 4, 2)), защото при моето представяне eval(repr(Point(2, 4, 2)) ще върне Point(1, 2, 1), но тези две точки са една и съща?

    21.04.2010
  • @Атанас

    Не виждам какъв е проблема при условие, че следното е вярно:

    self.assertEquals( Point( 1,2 ), Point( 2,4,2 ) )

    21.04.2010