Forth http://fforum.winglion.ru/ |
|
Задача: симметричны ли точки на плоскости http://fforum.winglion.ru/viewtopic.php?f=19&t=3177 |
Страница 1 из 1 |
Автор: | Hishnik [ Ср июн 13, 2018 21:41 ] |
Заголовок сообщения: | Задача: симметричны ли точки на плоскости |
Даны целочисленные координаты четырех точек в двумерном пространстве. Составить программу, которая определит, существует ли прямая, относительно которой пары точек будут располагаться симметрично. |
Автор: | F-MAP [ Ср июн 13, 2018 22:41 ] |
Заголовок сообщения: | Re: Задача: симметричны ли точки на плоскости |
Уточните задачу, симметричная прямая не должна проходить не по одной точке? |
Автор: | Hishnik [ Ср июн 13, 2018 22:47 ] |
Заголовок сообщения: | Re: Задача: симметричны ли точки на плоскости |
F-MAP писал(а): Уточните задачу, симметричная прямая не должна проходить не по одной точке? Там указано - "пары точек". Т.е. если лист бумаги "перегнуть" по какой-то прямой, то две точки наложатся на другие две. |
Автор: | F-MAP [ Ср июн 13, 2018 22:52 ] |
Заголовок сообщения: | Re: Задача: симметричны ли точки на плоскости |
Допустим, две точки совпадают, две расходятся, по ним согнуть лист, это не верное решение? |
Автор: | Hishnik [ Ср июн 13, 2018 22:57 ] |
Заголовок сообщения: | Re: Задача: симметричны ли точки на плоскости |
F-MAP писал(а): Допустим, две точки совпадают, две расходятся, по ним согнуть лист, это не верное решение? * | * | * | | * Вот в этом варианте явно несимметрично. |
Автор: | F-MAP [ Чт июн 14, 2018 10:51 ] |
Заголовок сообщения: | Re: Задача: симметричны ли точки на плоскости |
Код: \ на SPF без SIN COS
\ исходные координаты структура 0 CELL -- x1 CELL -- y1 CELL -- x2 CELL -- y2 CELL -- x3 CELL -- y3 CELL -- x4 CELL -- y4 \ координаты прямой CELL -- xн CELL -- yн CELL -- xк CELL -- yк CREATE krd ALLOT \ анализ координат структура 0 CELL -- ax1 CELL -- ay1 CELL -- ax2 CELL -- ay2 CELL -- ax3 CELL -- ay3 CELL -- ax4 CELL -- ay4 CREATE akrd ALLOT : ЗаполнитьИсходные ( x1 y1 x2 y2 x3 y3 x4 y4 -- ) SWAP krd x4 2! SWAP krd x3 2! SWAP krd x2 2! SWAP krd x1 2! ; : ЗаполнитьАнализ ( y1 x1 y2 x2 y3 x3 y4 x4 -- ) akrd x4 2! akrd x3 2! akrd x2 2! akrd x1 2! ; \ Проверить паралельность отрезков ax1 ay1 ax2 ay2 и ax3 ay3 ax4 ay4 : Паралельны? \ формула из геометрии ( -- f ) \ f = true - паралельны DS>F F* F- можно заменить на * -, но опасность переполнения разрядности akrd ay4 @ akrd ay3 @ - DS>F akrd ax2 @ akrd ax1 @ - DS>F F* akrd ax4 @ akrd ax3 @ - DS>F akrd ay2 @ akrd ay1 @ - DS>F F* F- F0= ; : Координаты_Прямой akrd x1 @ akrd x2 @ + 2/ krd xн ! akrd y1 @ akrd y2 @ + 2/ krd yн ! akrd x3 @ akrd x4 @ + 2/ krd xк ! akrd y3 @ akrd y4 @ + 2/ krd yк ! ; : Дист \ перпендикулярное растояние от точки x1 y1 до прямой xн yн xк yк krd yн @ krd yк @ - DS>F krd x1 @ DS>F F* krd xк @ krd xн @ - DS>F krd y1 @ DS>F F* F+ krd xн @ DS>F krd yк @ DS>F F* krd xк @ DS>F krd yн @ DS>F F* F- F+ krd xк @ krd xн @ - DS>F FDUP F* krd yк @ krd yн @ - DS>F FDUP F* F+ FSQRT F/ F>DS \ деление на 0 может быть! ABS ; : Перпендикулярны? ( -- f ) krd x1 @ krd xн @ - DS>F F**2 krd y1 @ krd yн @ - DS>F F**2 F+ FSQRT F>DS Дист = ; : ЕстьПаралельные? ( x1 y1 x2 y2 x3 y3 x4 y4 -- f ) \ f = true есть такая \ должны быть два паралельных отрезка ЗаполнитьИсходные krd x1 2@ krd x2 2@ krd x3 2@ krd x4 2@ ЗаполнитьАнализ Паралельны? ?DUP IF EXIT THEN \ следующая комбинация krd x1 2@ krd x3 2@ krd x2 2@ krd x4 2@ ЗаполнитьАнализ Паралельны? ?DUP IF EXIT THEN \ последняя комбинация krd x1 2@ krd x4 2@ krd x3 2@ krd x2 2@ ЗаполнитьАнализ Паралельны? ; : ЕстьСиметричная? ( x1 y1 x2 y2 x3 y3 x4 y4 -- f ) ЕстьПаралельные? IF Координаты_Прямой Перпендикулярны? ELSE FALSE THEN ; |
Автор: | Hishnik [ Чт июн 14, 2018 14:46 ] |
Заголовок сообщения: | Re: Задача: симметричны ли точки на плоскости |
А есть вариант, когда не используется плавающая точка? |
Автор: | Victor__v [ Чт июн 14, 2018 15:00 ] |
Заголовок сообщения: | Re: Задача: симметричны ли точки на плоскости |
А подразумевается ли помимо вертикали и горизонтали диагональ? Или "углы" менее 45 градусов? |
Автор: | F-MAP [ Чт июн 14, 2018 20:56 ] |
Заголовок сообщения: | Re: Задача: симметричны ли точки на плоскости |
Hishnik писал(а): А есть вариант, когда не используется плавающая точка? Код: \ на SPF Фигура если не огромная
\ исходные координаты структура 0 CELL -- x1 CELL -- y1 CELL -- x2 CELL -- y2 CELL -- x3 CELL -- y3 CELL -- x4 CELL -- y4 CREATE krd ALLOT : ЗаполнитьИсходные ( x1 y1 x2 y2 x3 y3 x4 y4 -- ) SWAP krd x4 2! SWAP krd x3 2! SWAP krd x2 2! SWAP krd x1 2! ; : ПеретресемПоУглам 3 0 DO 4 I 1+ DO J 2 CELLS * krd + @ I 2 CELLS * krd + @ < IF J 2 CELLS * krd + 2@ I 2 CELLS * krd + 2@ J 2 CELLS * krd + 2! I 2 CELLS * krd + 2! THEN LOOP LOOP krd y1 @ krd y2 @ > IF krd y1 2@ krd y2 2@ krd y1 2! krd y2 2! THEN krd y4 @ krd y3 @ > IF krd y4 2@ krd y3 2@ krd y4 2! krd y3 2! THEN ; : Диагональ1 krd x1 @ krd x3 @ - DUP * krd y1 @ krd y3 @ - DUP * + ; : Диагональ2 krd x2 @ krd x4 @ - DUP * krd y2 @ krd y4 @ - DUP * + ; : ЕстьСиметричная? ( x1 y1 x2 y2 x3 y3 x4 y4 -- f ) ЗаполнитьИсходные ПеретресемПоУглам Диагональ1 Диагональ2 = ; |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |