![]() |
|
|
![]()
|
|
| triam |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 1.12.2006 Репутация: нет Всего: нет |
Задание следующее:
Пользователь вводит координаты точки, потом вводит координаты начала отрезка (х, у) а так же конца..... Прога выводит наикротчайшее расстояние от точки до отрезка.... Примерный алгоритм, думаю, следующий : 1) Вычислить уравнение прямой на которой находится отрезок.... 2)найти расстояние от первой точки отрезка до заданной точки... 3)потом в цикле который стремиться к концу отрезка сравнивать предыдущие расстояние с текущем до тех пор пока предыдущее расстояние не окажется больше настоящего ... Вот а в палне реализации даже не знаю с чего начинать........ Синтаксис ASM-a относительно знаю, но практика практически нулевая - не было времени практиковаться - работа всё занимала ... НАРОД HELP !!! СПАСАЙТЕ!!! Это сообщение отредактировал(а) triam - 1.12.2006, 21:38 |
|||
|
||||
| anwe |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 748 Регистрация: 2.9.2006 Репутация: 1 Всего: 23 |
2) и 3) не подходит. Совершенно не правильно. Если ты можешь сделать 1), то есть найти уравение прямой, содержащей отрезок, то почему нельзя это сделать второй раз?
Есть уравнения прямой, проходящей через заданную точку. А кратчайшее расстояние - этот перпендикуляр. Условие перпендикулярности к1=-1/к2. |
|||
|
||||
| triam |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 1.12.2006 Репутация: нет Всего: нет |
Кратчайшее расстоянее перпендикуляр, тогда когда речь идёт о прямой и точке...
а тут отрезок и точка. Отрезок можно задать такой что перпедикуляр из точки к отрезку нельзя будет провести без продолжения отрезка........ разве нет? |
|||
|
||||
| anwe |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 748 Регистрация: 2.9.2006 Репутация: 1 Всего: 23 |
Почитай свое первое сообщение:
|
|||
|
||||
| triam |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 1.12.2006 Репутация: нет Всего: нет |
anwe, Sor ошибся .......
уже исправил "от точки до отрезка" так будет правильно Это сообщение отредактировал(а) triam - 1.12.2006, 21:39 |
|||
|
||||
| anwe |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 748 Регистрация: 2.9.2006 Репутация: 1 Всего: 23 |
Все равно неправильно по двум критериям.
1. Редактировать свое сообщение, спустя час, по сути, а главное, после ответов других участников форума, если и можно по правилам форума, но уж о-о-очень неправильно!!!! 2. В таком случае твой задача сводится к простому треугольнику. В нем одна боковая сторона меньше другой всегда, кроме случая равнобедренного (равностроннего) трекгольника. Никакой цикл не нужен. Надо провести отрезки от точки к началу отрезка, потом к концу отрезка, их сравнить. И все! Выбрать меньший. Если они равны - найти высоту треугольника. Это геометрия! |
|||
|
||||
| triam |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 1.12.2006 Репутация: нет Всего: нет |
Согласен, косякнул.....
а ты не не учитываешь того варианта что если две боковые строны не равны, что высота может быть меньше их всех? Добавлено @ 23:08 И ещё, провести отрезки это значит вычислить их длину, следовательно имеем уравнение: l= ((x1-x2)^2+(y1-y2)^2)^1/2 т.е. мы уже имеем дело с числами с плавающей точкой.... а вот в этом я пока вообще не шарю, так что очень прошу помочь... |
||||
|
|||||
| dma |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 1.12.2006 Где: Belarus, Minsk Репутация: нет Всего: 1 |
А что есть высота?
Высота - это и есть перпендикуляр. Теперь на пальцах: если в твоём случае из точки на отрезок можно проложить перпендикуляр - то это и есть кратчайшее расстояние. Если нельзя (т.е. высота лежит ВНЕ треугольника), тогда просто бери меньшую сторону. |
|||
|
||||
| triam |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 1.12.2006 Репутация: нет Всего: нет |
dma, загвоздка в реализации
|
|||
|
||||
| anwe |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 748 Регистрация: 2.9.2006 Репутация: 1 Всего: 23 |
А с геометрией-то понятно?
|
|||
|
||||
| triam |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 1.12.2006 Репутация: нет Всего: нет |
anwe, с ней-то - да...
|
|||
|
||||
| anwe |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 748 Регистрация: 2.9.2006 Репутация: 1 Всего: 23 |
||||
|
||||
| triam |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 1.12.2006 Репутация: нет Всего: нет |
да с тем же самым нахождением длины, ладно к примеру в квадрат мы возведём с помощью fmul (прочёл в книге ) но как быть с корнем? далее не могу построить саму структуру программы, ну что small и stack 100h понятно, (хотя можно и по другому вообще в COM загнать), но что делать дальше? вообщем вопросов слишком много чтобы в короткое время "понабивать синяки" и самому допереть до этого. Поэтому я и прошу вашей помощи.... |
|||
|
||||
| anwe |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 748 Регистрация: 2.9.2006 Репутация: 1 Всего: 23 |
||||
|
||||
| triam |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 1.12.2006 Репутация: нет Всего: нет |
тут же не ASM.... на С я и сам смогу это написать.... Я немогу написать это на ASM-е Самый простой алгоритм это: проверяем наличие перпендикуляра, если его нет сравниваем две стороны. |
|||
|
||||
| anwe |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 748 Регистрация: 2.9.2006 Репутация: 1 Всего: 23 |
Во-первых, там Pascal.
Во-вторых, там перед кодом расписана теория для лучшего понимания, приведены математические уравнения. Все знаки, указанные в них реализуются в асме. Другими словами, хотел натолкнуть на то, что бы ты сам решил, а вопросы задавал лишь конкретные, но что-то не получается. |
|||
|
||||
| triam |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 1.12.2006 Репутация: нет Всего: нет |
anwe, теория геометрии?
это я уже сам всё вывел... я же сказал что сам я реализовать на ASM-e не могу, меня сегодня вечером известили что завтра сдавть, вот и всё, я даже не знаю сейчас за что хвататься в первую очередь. Просто сижу и читаю Зубкова разбираю его первые проги, пытаюсь вникнуть, а с геометрией, я уже разобрался.... |
|||
|
||||
| anwe |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 748 Регистрация: 2.9.2006 Репутация: 1 Всего: 23 |
||||
|
||||
| triam |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 1.12.2006 Репутация: нет Всего: нет |
Завтра т.е. сегодня, у меня тоже суббота, мы по ним учимся обычно.... Всё равно спасибо |
|||
|
||||
| triam |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 1.12.2006 Репутация: нет Всего: нет |
Так вот!
продолжим общение: Я всё равно настаиваю на своём алгоритме, грамотно подкорректированным, dma, что немного противоречит anwe, который утверждает, что перпендикуляр может являться кротчайшим расстоянием только тогда когда треугольник равнобедренный или равносторонний, - наличие перпендикуляра уже говорит что он короче остальных двух сторон... Посему, сначала ищем перпендикуляр.... пускай мы имеем начальные координаты отрезка: x1, y1 и конечные: x2, y2 а так же той злополучной точки: tx, ty и точка которая преналежит двум отрезкам сразу(такая будет, если отрезки перпендикулярны что в принципе и должно проверяться): un_x, un_y Общее уравнение прямой: y=kx+b Зная две координаты этой прямой, не трудно вычислить неизвестные элементы в нашем случае, это k и b k=(y2-y1)/(x2-x1) Условием перпендикулярности двух прямых является k1=-1/k2 в нашем случае это будет выполнение следующего условия:
Что каcается исполнения на Asm-e: Чтобы поставить условие надо юзать команду test, ну и там как следствие jnz Но первая загвоздка в вычислении самого выражения... В какой-то мере мы имеем дело с числами с плавающей точкой, и поэтому прийдётся использовать команды FPU. Тут я пытаюсь вычичлить левую часть условия (ty-un_y)/(tx-un_x) Вот примерные наброски кода(прошу сильное негодование не выржать по этому поводу, ну нет у меня пока Assembler-вского мышления):
Вот. Жду ваших - замечаний... Одна надежда на вас!!! выручайте! |
||||
|
|||||
![]()
|
| Правила форума "Asm: Общие вопросы" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |