Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
1963 / 819 / 114
Регистрация: 01.10.2012
Сообщений: 4,769
Записей в блоге: 2

Образование и практика

16.03.2025, 17:58. Показов 4781. Ответов 68
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день

А вот каково качество/эффективность ВУЗовского образования? Аналитическая геометрия изучается в первом семестре и считается довольно легким курсом, что вполне справедливо. Ну хорошо, вот курс пройден и экзамен сдан. Начинает человек работать (по окончании ВУЗа или раньше), и занимается "компьютерной графикой". И приходится ему решать небольшие задачки. Напр
Луч v пересекает поверхность 3D объекта в точке p где известна нормаль к поверхности n. Требуется найти направление отраженного луча v' по правилу "угол падения равен углу отражения"
Ну или чуть по-другому
Ситуация та же но требуется найти преломленный луч, коэффициент преломления ior задан.
Справится ли человек с такими? Варианты

1. Легко справится
2. Подумает и решит
3. Ни фига не решит
4. Ваш вариант
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.03.2025, 17:58
Ответы с готовыми решениями:

Теория и практика создания QA-систем
Хочу создать свою QA-систему, по этому реквестирую интересные статьи, книги, или собственные идеи по этой тематике.

Практика с алгоритмом блокчейна и собственная наработка
Всех приветствую!:senor: Интересуюсь таким вопросом: кто пробовал создавать какие-либо проекты или только какие-нибудь свои наработки...

Опыт или образование
Уважаемые, подскажите пожалуйста, что в it сфере больше ценится, образование или опыт ? Вероятно вопрос задан некорректно, т.к. будут...

68
1963 / 819 / 114
Регистрация: 01.10.2012
Сообщений: 4,769
Записей в блоге: 2
28.03.2025, 18:34  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Catstail Посмотреть сообщение
А вообще-то вы легко выиграете все споры, если предъявите "городу и миру" примерно следующее: "Вот задача, решение которой было совсем не очевидным. И я решил её без всякого образования!" C этим фактом оппонентам спорить будет трудно. Дерзайте!
Та ну.. какой из меня "самородок"? И мыслей таких не было. Когда-то (давно) я начал заниматься 3D графикой и потребовались знания аналитической геометрии. Про скалярное помнил что это косинус на длины и что вычисляется как сумма произведений. Про векторное формулы точно не помнил, только принцип (каждая компонента (x, y, z) вычисляется из двух других) и что получившийся вектор перпендикулярен обоим исходным. Это были все мои институтские познания спустя 15 лет. Но они мне мало помогли, конечно задачки стартового поста я решать не умел. Интернет тогда был в зародыше (и слава богу), пришлось разбираться по исходникам, это было не так уж легко и быстро.

Рискну утверждать что за истекшие (почти) полвека ровным счетом ничего не изменилось. Во всяком случае с точки зрения образования. Да, появился/расцвел интернет, но это такая "палка о двух концах" что может легко покалечить. Практический любой оказывается в том же положении что был я
Цитата Сообщение от Catstail Посмотреть сообщение
все ваши мысли отдают дилетантизмом, но эта - просто шедевр! Сами же указали центральную проблему образования - отсутствие мотивации (следствие массовости и обязательности). Но мотивация не вырабатывается натаскиванием. Скорее уж натаскивание отбивает мотивацию. Зря спорите...
В чем же мой дилетантизм? Можно ли исправить ситуацию, сделать выпускника более приспособленным к практике? Считаю что да, можно. Причем без всяких (гнусных) отсылок к "книгам" и лазаний в инете. Просто-напросто решать такие задачки, подробно разобрав 1-2 первых. Собсно я это и исполнил в данной теме. Др словами надо "освоить типовой прием", и это достигается повторением упражнений. Человек увлечен - тем лучше, быстрее зайдет. Нет мотивации - все равно этому научим, как и всему в вузе. Не вижу ничего плохого в слове "натаскать"

Цитата Сообщение от Catstail Посмотреть сообщение
Так тем актуальнее лозунг "учиться надо, дружок"...
Лозунг без всяких конкретных путей - это и есть демагогия
0
Модератор
10365 / 5652 / 3397
Регистрация: 17.08.2012
Сообщений: 17,252
28.03.2025, 19:59
Igor3D, Вам удалось за 15 лет забыть, чему Вас учили? Странно... Мне вот за 35 лет не удалось ничего толком забыть. Даже если что-то и запамятовал, то почитал что-то по теме, и всё вспомнил.

Что со мной не так?
1
1963 / 819 / 114
Регистрация: 01.10.2012
Сообщений: 4,769
Записей в блоге: 2
28.03.2025, 22:04  [ТС]
Цитата Сообщение от Cyborg Drone Посмотреть сообщение
Igor3D, Вам удалось за 15 лет забыть, чему Вас учили? Странно... Мне вот за 35 лет не удалось ничего толком забыть. Даже если что-то и запамятовал, то почитал что-то по теме, и всё вспомнил.
Хорошо, пусть у Вас память лучше (моя ниже средней), пусть Вы учились лучше, и вообще Вы - молодец Со всем согласен, только вот результат точно такой же как у меня в свое время: задачку на преломление решить не смог. Типовой прием не был отработан, этому не учили, а он оказывается очень нужен.
Цитата Сообщение от Cyborg Drone Посмотреть сообщение
Что со мной не так?
Мое личное мнение: не хватает самокритичности
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,683
Записей в блоге: 14
29.03.2025, 08:45
Цитата Сообщение от Igor3D Посмотреть сообщение
В чем же мой дилетантизм?
- например, в том, что "натаскать - легко". Попробуйте "натаскать" хоть одного перца, который поступил без мотивации.

Добавлено через 48 секунд
Цитата Сообщение от Igor3D Посмотреть сообщение
Мое личное мнение: не хватает самокритичности
- вы обвиняете других как раз в том, чем грешите сами...

Добавлено через 2 минуты
Цитата Сообщение от Igor3D Посмотреть сообщение
Лозунг без всяких конкретных путей - это и есть демагогия
- нет. Демагогия - это стремление убедить собеседника в истинности тезисов, которые сам убеждающий считает ложными. Инженер из рассказа Шукшина таковым, очевидно, не является.

Еще раз: зря спорите...

Добавлено через 2 минуты
Цитата Сообщение от Igor3D Посмотреть сообщение
Нет мотивации - все равно этому научим, как и всему в вузе. Не вижу ничего плохого в слове "натаскать"
- я тоже не считаю эти слова плохими. Но натаскать можно только при мотивации. Учить без мотивации обучаемого нельзя (он не будет учиться). Вы учили кого-нибудь без его мотивации? Попробуйте и убедитесь.

Добавлено через 10 минут
Цитата Сообщение от Igor3D Посмотреть сообщение
Это были все мои институтские познания спустя 15 лет.
- всё это означает, что: 1) вас плохо учили; или 2) вы плохо (поверхностно) учились; или обе причины вместе (они друг другу не противоречат).
Что же до памяти, то она, разумеется, у каждого своя, но её нужно развивать. Всю жизнь. С детских лет. Детей для этого заставляют учить стихи. Если на память "забить", то будет плохо.

На самом же деле, главная цель высшего образования - это не запоминание конкретных формул (типа скалярного, векторного, смешанного произведений), а умение структурировать знания и приведение их в систему. Если это есть, то формулу можно и забыть. А при необходимости - вспомнить (не грех - заглянуть в книги или в Сеть) или даже вывести самому. О чем вам и написал уважаемый Cyborg Drone.

Конкретные формулы (если ими не пользуются) из памяти у обычных людей (вроде нас с вами) быстро вымываются. А принципы живут гораздо дольше.
0
Модератор
Эксперт функциональных языков программирования
3132 / 2279 / 469
Регистрация: 26.03.2015
Сообщений: 8,870
29.03.2025, 16:27
Цитата Сообщение от Igor3D Посмотреть сообщение
Это были все мои институтские познания спустя 15 лет. Но они мне мало помогли
Формула, которую использовал 2 года, а потом не используешь 15 лет, забывается. Поэтому от высшего образования не требуется, чтобы выпускник выучил все формулы (и/или технологии), которые потребуются ему в дальнейшей работе.

Цитата Сообщение от Igor3D Посмотреть сообщение
Можно ли исправить ситуацию, сделать выпускника более приспособленным к практике?
Я считаю, что лично меня очень хорошо подготовили к практике. Хотя у меня образование даже не профильное (инженер-физик: распространение волн, антенны, волноводы и т.п.). Из программирования у нас были только основы фортрана и численные методы (упрощённо: вычисление интегралов суммированием). Всё, что я использую в работе, я выучил самостоятельно. Во многом, благодаря заложенной в институте базе.

Цитата Сообщение от Catstail Посмотреть сообщение
а умение структурировать знания и приведение их в систему. Если это есть, то формулу можно и забыть.
Полностью согласен.

Цитата Сообщение от Catstail Посмотреть сообщение
А принципы живут гораздо дольше.
Я считаю, что институт тем и отличается от техникума, что там дают не готовые решения, а принципы, на которых эти готовые решения основываются. Зная эти принципы, можно легко освоить (или даже вывести самому) те самые решения.

И наоборот. Например, я не знаю, что такое p-адические числа (не было в программе). Поэтому мне сложно разбираться с алгоритмами на их основе. Прочтение статьи в википедии слабо помогает.
1
1963 / 819 / 114
Регистрация: 01.10.2012
Сообщений: 4,769
Записей в блоге: 2
29.03.2025, 18:39  [ТС]
Цитата Сообщение от Catstail Посмотреть сообщение
- всё это означает, что: 1) вас плохо учили; или 2) вы плохо (поверхностно) учились
Может Вы хотите сказать что если бы учили/учился хорошо, то задачки стартового поста решил бы? Ну курс аналитической геометрии везде одинаков, был и есть, "лучше учить" отпадает. Может я туповат и не выучил что нужно? Да не было его, того что нужно для этих задачек. Что хорошо заметно в данной теме. По каким-то причинам Вы сами не рассказали ни принцип (типовой прием) ни даже конкретные решения, а (благоразумно) подождали пока все будет озвучено. Это Ваше право, но Вы даже не ответили на вопрос стартового поста "справится или нет". Наверно знаете ответ.

И вообще, думаю Вы совершенно напрасно пытаетесь закрыть рот (конструктивной) критике. Причем чисто в советском стиле (очернить хочет! тщится доказать! да он сам безграмотный! еще раз! и.т.п. ). Разве нет "стыка" между образованием и практикой? Да конечно есть, было бы странно если нет. Признать это лучше и (намного) проще.

Цитата Сообщение от Shamil1 Посмотреть сообщение
Я считаю, что институт тем и отличается от техникума, что там дают не готовые решения, а принципы, на которых эти готовые решения основываются. Зная эти принципы, можно легко освоить (или даже вывести самому) те самые решения.
Такие вещи легко и приятно "декларировать" Особенно если не вдумываться/копать глубже. Разложить вектор на 2 явно не тянет на "принцип", и из каких принципов это следует - неясно. Это простенький приёмчик который надо "просто знать". В соревновании/альтернативе рыба/удочка обычно удочка побеждает только на словах, а на деле - рыба.

Цитата Сообщение от Catstail Посмотреть сообщение
Но натаскать можно только при мотивации. Учить без мотивации обучаемого нельзя (он не будет учиться). Вы учили кого-нибудь без его мотивации? Попробуйте и убедитесь.
Да чихать на его мотивацию. Вот конспект (хотя бы что я написал выше), выучить наизусть. Если не полный идиот - следующую подобную задачку решит. А нет - 2 балла, минус степуха и.т.п. А если начинать всякие там "работать самостоятельно" да "открывать книги" - ну тогда конечно будут "непреодолимые трудности", это не те методы которыми вкладываются базовые знания
0
29.03.2025, 19:36

Не по теме:

Цитата Сообщение от Shamil1 Посмотреть сообщение
И наоборот. Например, я не знаю, что такое p-адические числа (не было в программе).
Посмотрите книжку Безошибочные вычисления. Методы и приложения. Р.Грегори. гл.2. (у меня в бумаге, но встречал в эл. виде в сети) Как по мне, там все достаточно понятно объясняется и с числовыми примерами.

0
Модератор
Эксперт функциональных языков программирования
3132 / 2279 / 469
Регистрация: 26.03.2015
Сообщений: 8,870
29.03.2025, 20:03
Цитата Сообщение от Igor3D Посмотреть сообщение
Разложить вектор на 2 явно не тянет на "принцип", и из каких принципов это следует - неясно. Это простенький приёмчик который надо "просто знать".
Этот приём широко используется, начиная с 8-го класса школы (или когда там сейчас проходят законы Ньютона). Решая задачу из стартового поста, я даже не догадался, что именно это Вы имели ввиду под "типовым приёмом"

Базовый принцип называется "разложение по базису". Этот принцип основан на другом базовом принципе - сложении векторов. Эти принципы невозможно забыть ни через 15 лет, ни через 50 лет.

Цитата Сообщение от Igor3D Посмотреть сообщение
В соревновании/альтернативе рыба/удочка обычно удочка побеждает только на словах, а на деле - рыба.
Зависит от человека. Недаром столько споров в интернете на тему, нужно ли программисту высшее образование. Можно хорошо изучить какую-то одну технологию (готовые решения) - например, WorldPress - и зарабатывать приличные деньги, не умея ни в архитектуру, ни в алгоритмы.
0
Модератор
Эксперт функциональных языков программирования
3132 / 2279 / 469
Регистрация: 26.03.2015
Сообщений: 8,870
29.03.2025, 20:06
Цитата Сообщение от u235 Посмотреть сообщение
Безошибочные вычисления. Методы и приложения. Р.Грегори.
Спасибо. Почитаю.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,683
Записей в блоге: 14
29.03.2025, 20:39
Цитата Сообщение от Igor3D Посмотреть сообщение
Вот конспект (хотя бы что я написал выше), выучить наизусть. Если не полный идиот - следующую подобную задачку решит. А нет - 2 балла, минус степуха и.т.п.
- 2 балла - это отчисление. О чем я и говорил (если отчислить немотивированных долбаков, то проблем не будет).

Я уже указывал вам на ваш дилетантизм, но вы все никак не уймётесь. Лезете в чужую область (преподавание), где раздаёте бесполезные советы как раз с коммунистическим задором. Так что, прежде чем обвинять меня в приверженности к совку, подойдите к зеркалу.

Цитата Сообщение от Igor3D Посмотреть сообщение
Может Вы хотите сказать что если бы учили/учился хорошо, то задачки стартового поста решил бы?
- в общем, да. При условии, что тот, кто решает - в теме. В противном случае нужно вспоминать. И тот, кто хорошо учился (и кого хорошо учили) способен это сделать.

А когда вы пишете примерно так: "Я учился 15 лет назад, но помню только скалярное произведение", то любой разумный человек вам на это скажет "Ваши проблемы". ВУЗ тут никак не виноват. Кстати, а какой ВУЗ вы заканчивали?
0
1963 / 819 / 114
Регистрация: 01.10.2012
Сообщений: 4,769
Записей в блоге: 2
31.03.2025, 16:01  [ТС]
Цитата Сообщение от Shamil1 Посмотреть сообщение
Базовый принцип называется "разложение по базису". Этот принцип основан на другом базовом принципе - сложении векторов. Эти принципы невозможно забыть ни через 15 лет, ни через 50 лет.
Не совсем так, хотя и близко. (Пресловутое) скалярное произведение в школе не дается. Базис не "заранее готовый", а вычисляется "на лету". И что считать базисом - не так уж ясно. Про "невозможно забыть" согласен, но в своих предыдущих ответах Вы про базис ничего не говорили Мне кажется что многовато требовать от человека чтобы он все это сообразил "к месту". Знать такой "шаблончик" решения - думаю правильный путь. Но я его не знал
Цитата Сообщение от Catstail Посмотреть сообщение
Я уже указывал вам на ваш дилетантизм, но вы все никак не уймётесь. Лезете в чужую область (преподавание), где раздаёте бесполезные советы как раз с коммунистическим задором. Так что, прежде чем обвинять меня в приверженности к совку, подойдите к зеркалу.
Наконец-то Вы нашли для меня подходящий ярлык. То я чудак-изобретатель, то злобный мизантроп Теперь вот совок, пусть так
Цитата Сообщение от Catstail Посмотреть сообщение
- в общем, да. При условии, что тот, кто решает - в теме. В противном случае нужно вспоминать. И тот, кто хорошо учился (и кого хорошо учили) способен это сделать.
Да? И сколько же % Ваших студентов смогут решить задачки стартового поста без всяких шпаргалок? (отвечать необязательно)
Цитата Сообщение от Catstail Посмотреть сообщение
"Я учился 15 лет назад, но помню только скалярное произведение"
Да может и не только. Почитывая всякие ссылочки я частенько замечаю что кое-что мне знакомо. Но это типа подсознание или "боковое зрение", не увидев я бы никогда этого не вспомнил. Я прослушал курс осенью 1977, сдал экзамен в январе 1978, а знания мне понадобились в середине 90-х. Знаний что я могу применять целенаправленно довольно мало. Ну а собсно какие знания нужны для этих задачек? Думаю дело тут не в знаниях как таковых, они у всех примерно одинаковы, а в умении их применять на практике.

Ладно, вот фрагмент кода. Что он делает? Можете ли Вы его продолжить?
C++
1
2
3
float u2 = (p1 - p0).lengthSquared();  //  квадрат длины
if (u2 < epsilon) return (p0 + p1) / 2;
float d = QVector3D::dotProduct(a - p0, p1 - p0) / u2;
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,683
Записей в блоге: 14
31.03.2025, 17:44
Цитата Сообщение от Igor3D Посмотреть сообщение
Наконец-то Вы нашли для меня подходящий ярлык. То я чудак-изобретатель, то злобный мизантроп Теперь вот совок, пусть так
- это вы, что называется, размечтались... Для меня вы по-прежнему нарцисс и не более.

Цитата Сообщение от Igor3D Посмотреть сообщение
Ладно, вот фрагмент кода. Что он делает? Можете ли Вы его продолжить?
- нет информации о типах (классах) переменных. Что такое p1, p2? Векторы? Ну, ок. Считается квадрат длины их разности. Если он меньше некоего (вероятно, малого) значения эпсилон, то возвращается полусумма векторов (которую для более высокой производительности лучше вычислять не делением на 2, а умножением на 0.5). А затем для данного вектора a вычисляется скаляное произведение a-p0 и p1-p0, результат делится на квадрат длины p1-p0. И что? Что вы хотите мне доказать? Я в состоянии разобраться в этом коде.

Тогда и вы попробуйте разобраться вот в моем коде. Что делает эта функция? Код длиннее вашего, но он решает законченную задачу. Из матричной алгебры.

Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
def foo(matr):
    n=len(matr)
    while True:
        imax=0
        jmax=1
        vmax=abs(matr[imax][jmax])
        i=0
        while i<=n-2:
            j=i+1
            while j<n:
                if abs(matr[i][j])>vmax:
                    vmax=abs(matr[i][j])
                    imax=i
                    jmax=j
                j+=1
            i+=1
        if vmax<0.001:
            break
 
        ematr=[[0 for _ in range(n)] for _ in range(n)]
 
        for i in range(n):
            ematr[i][i]=1;
 
        aii=matr[imax][imax]
        ajj=matr[jmax][jmax]
        aij=matr[imax][jmax]
 
        if abs(aii-ajj)<1.0e-9:
            if aij>0:
                fi=-pi*0.25
            else:
                fi=pi*0.25
        else:
        
            fi = 0.5 * atan(-2*aij/(ajj-aii))
 
        ematr[imax][imax]=cos(fi)
        ematr[jmax][jmax]=cos(fi)
 
        ematr[imax][jmax]=sin(fi)
        ematr[jmax][imax]=-sin(fi)
 
        tmp=mult_matr(ematr,matr)
    
        ematr[imax][jmax]=-sin(fi)
        ematr[jmax][imax]=sin(fi)
   
        matr=mult_matr(tmp,ematr)
 
    for i in range(n):
        print(matr[i][i])


Добавлено через 5 минут
Цитата Сообщение от Igor3D Посмотреть сообщение
Да? И сколько же % Ваших студентов смогут решить задачки стартового поста без всяких шпаргалок? (отвечать необязательно)
- можно и ответить. Я не учу студентов 3d-графике. Но в рамках моего курса задачи стартовой сложности решает процентов 85%. И, опять-таки, что?

Вы, что называется, "подставились". Не стоит ругать тех, кто вас учил. Ибо в этом случае легко возразить: значит, плохо учились. И нарциссизм демонстрировать тоже не стоит (типа "я, да я..."). Вы, как говорится, еще Бога за бороду не взяли.
Но уж если похвастаться очень хочется, то продемонстрируйте конкретное достижение.
0
1963 / 819 / 114
Регистрация: 01.10.2012
Сообщений: 4,769
Записей в блоге: 2
31.03.2025, 18:17  [ТС]
Цитата Сообщение от Catstail Посмотреть сообщение
А затем для данного вектора a вычисляется скаляное произведение a-p0 и p1-p0, результат делится на квадрат длины p1-p0. И что? Что вы хотите мне доказать? Я в состоянии разобраться в этом коде.
Ну пересказать код словами - совсем не значит разобраться. Что это за "деление на квадрат"? Зачем? Что писавший хотел получить? Это тоже "прием", пусть и очень маленький.
Цитата Сообщение от Catstail Посмотреть сообщение
Тогда и вы попробуйте разобраться вот в моем коде. Что делает эта функция? Код длиннее вашего, но он решает законченную задачу. Из матричной алгебры.
Попробую, хотя с пытоном почти не знаком. Но давайте "ходить по очереди", сначала закончим с моим вопросом, и дадим возможность другим ответить, потом возьмемся за Ваш
Цитата Сообщение от Catstail Посмотреть сообщение
Не стоит ругать тех, кто вас учил.
Да я и не ругал. Мои преподы были, по меньшей мере, никак не хуже других (ну я так думаю)
0
5514 / 2867 / 571
Регистрация: 07.11.2019
Сообщений: 4,751
31.03.2025, 19:19
Igor3D, скалярное произведение векторов изучают в школе, по геометрии 9 класс.
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,683
Записей в блоге: 14
31.03.2025, 20:08
Цитата Сообщение от Igor3D Посмотреть сообщение
Что это за "деление на квадрат"? Зачем?
- нормировка длины. И, опять-таки, что из того? Код вырван из незнакомого мне контекста. Означать может многое чего...

Вот, к примеру (c Питоном не знакомы, так это C):

C
1
i=3-i;
Что он делает?

Добавлено через 4 минуты
Цитата Сообщение от Igor3D Посмотреть сообщение
Да я и не ругал. Мои преподы были, по меньшей мере, никак не хуже других (ну я так думаю)
- и ругать высшее образование тоже не стоит. Вы утверждаете, что до всего дошли сами? Если да - то это бездоказательно. Ибо невозможно проверить. Вы же ВУЗ-то кончили (кстати, какой?). т.е. систематические знания получили (или нет?). Вот если бы вы нигде не учились, и как Крис Касперски до всего дошли самообразованием - тогда дело другое...
0
Модератор
Эксперт функциональных языков программирования
3132 / 2279 / 469
Регистрация: 26.03.2015
Сообщений: 8,870
01.04.2025, 01:57
Цитата Сообщение от Igor3D Посмотреть сообщение
Можете ли Вы его продолжить?
Похоже на шараду.

C++
1
if (d >= 0.5) return (p0 + p1) / 2;
0
1963 / 819 / 114
Регистрация: 01.10.2012
Сообщений: 4,769
Записей в блоге: 2
02.04.2025, 06:39  [ТС]
Цитата Сообщение от Igor3D Посмотреть сообщение
вот фрагмент кода. Что он делает? Можете ли Вы его продолжить?
C++
1
2
3
float u2 = (p1 - p0).lengthSquared();  //  квадрат длины
if (u2 < epsilon) return (p0 + p1) / 2;
float d = QVector3D::dotProduct(a - p0, p1 - p0) / u2;
Цитата Сообщение от Catstail Посмотреть сообщение
Что это за "деление на квадрат"? Зачем?
- нормировка длины. И, опять-таки, что из того? Код вырван из незнакомого мне контекста. Означать может многое чего...
Разберемся что за "нормировка длины". Делим "просто на длину"
C++
1
float d = QVector3D::dotProduct(a - p0, p1 - p0) / (p1 - p0).length();
Скалярное произведение, второй вектор единичный. Это (знаковая) длина проекции первого вектора (a - p0) на направление второго. Напр длина (a2' - p0) на аттаче. Ладно, Еще раз делим на длину (в итоге на квадрат длины)
C++
1
float d = QVector3D::dotProduct(a - p0, p1 - p0) / (p1 - p0).length() / (p1 - p0).length();
Это по-прежнему длина проекции, но относительно/релятивно длины вектора (p1 - p0). Для точки a2' она будет между 0 и 1, для a3' больше 1.

Практическое применение не так уж велико. Вот популярная задачка для которой относительная/нормированная длина - "само то"
Найти расстояние от точки до отрезка
. Немного поразмыслив лучше переформулировать так
На отрезке заданном парой точек p0, p1 найти точку ближайшую к заданной a
А там уже хотим - длину, или нужна именно точка или еще чего. Поэтому я ожидал примерно такого ответа
C++
1
2
3
4
5
6
float u2 = (p1 - p0).lengthSquared();  //  квадрат длины
if (u2 < epsilon) return (p0 + p1) / 2;
float d = QVector3D::dotProduct(a - p0, p1 - p0) / u2;
if (d <= 0.0f) return p0;
if (d >= 1.0f) return p1;
return p0 * (1.0f - d) + p1 * d;
Конечно записано может быть всяко-разно, а если оборзеть и на epsilon не проверять то вообще в одну строчку.

Еще вариант - хотим обойтись без нормализации, просто множим исходный вектор (здесь p1 - p0) на относительную длину. Частенько это (глуповатое) стремление обойтись без квадратного корня (мол, оптимизация)
Миниатюры
Образование и практика  
0
Модератор
Эксперт функциональных языков программирования
3132 / 2279 / 469
Регистрация: 26.03.2015
Сообщений: 8,870
02.04.2025, 10:34
Цитата Сообщение от Igor3D Посмотреть сообщение
if (u2 < epsilon) return (p0 + p1) / 2;
Почему середину?
Можно выбрать между p0 и p1 по знаку скалярного произведения.
Если же считать, что эти точки расположены настолько близко, что между ними для нас нет разницы, то вернуть любую из них (бессмысленно вычислять середину).

В результате складывается впечатление, что задача как-то связана с серединой отрезка. Поэтому вместо "if (d >= 1.0f) return p1;" у меня "if (d >= 0.5) return (p0 + p1) / 2;".

Как-то так:
C++
1
2
3
4
5
6
float dp0 = QVector3D::dotProduct(a - p0, p1 - p0);
if (dp0 <= 0.0f) return p0;
float dp1 = QVector3D::dotProduct(a - p1, p1 - p0);
if (dp1 >= 0.0f) return p1;
float d = dp0 / (dp0 - dp1);
return p0 * (1.0f - d) + p1 * d;
Добавлено через 5 минут
Или (вместо последних двух строк):
C++
1
return (p0 * dp1 + p1 * dp0) / (dp0 - dp1);
(код не проверял, возможны опечатки)
1
5514 / 2867 / 571
Регистрация: 07.11.2019
Сообщений: 4,751
02.04.2025, 12:32
Если задан отрезок P0,P1, то любую точку P на нем можно представить в виде уравнения с параметром t:
P=P0+(P1-P0)*t, где t принадлежит интервалу [0, 1]
Далее рассмотрим функцию равную квадрату длины растояния от точки a до точки P.
Если продифференцировать ее по параметру t и приравнять к нулю, то найдем такое значение t, при котором это расстояние минимально. В итоге получим:
Python
1
2
3
t=np.dot((a-p0),(p1-p0))/np.dot((p1-p0),(p1-p0)) # параметр, при котором расстояние минимально.
t=np.clip(t, 0,1) # приводим к интервалу 0..1
p=p0+(p1-p0)*t
p.s. квадрат длины это и есть скалярное произведение вектора на самого себя.
0
Модератор
Эксперт функциональных языков программирования
3132 / 2279 / 469
Регистрация: 26.03.2015
Сообщений: 8,870
02.04.2025, 14:35
Цитата Сообщение от u235 Посмотреть сообщение
В итоге получим:
Тот же самый код, что и у Igor3D, только
1) вместо "if (d >= 1.0f) return p1;" у Вас "if (d >= 1.0f) d = 1.0f;"
2) нет проверки на 0, что может привести к делению на 0 (или к переполнению при очень маленьких u2).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.04.2025, 14:35
Помогаю со студенческими работами здесь

Высшее образование (математика + программирование)
Здравствуйте! Закончил десятый класс, пытаюсь определиться с вузом. Раньше много времени уделял химии, планировал идти на химфак, пару...

Практика в ML
Доброго времени суток, друзья! Я студент 2-го курса ПМИ (СПбГУ), изучаю паралельно с учебой computer science, теор. вер., эконометрику...

Прогресс в теории и практике программирования (новые фишки программ и вообще куда двигаться)
Давайте обсудим что за последние лет 5 нового было придумано программистами (в первую очередь российскими), какие новые фишки появились в...

Подскажите пожалуйста! Как заполненить дневник к производственной практике, может знает кто как это делать? Заранее спасибо)
Собственно трудности вызывает таблица в которой надо написать что я делал Каждый день! Таблица из 2 столбцов Дата | Рабочее...

Нужно ли это на практике?
Доброго {TimeOfDay}. У меня возник вопрос:Помагают ли олимпиадные задачи в работе программиста? Вот пример Коррупция prb21 С...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru