Автор |
Сообщение |
|
|
Заголовок сообщения: |
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 = ;
[quote="Hishnik"]А есть вариант, когда не используется плавающая точка?[/quote] [code]\ на 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 = ;[/code]
|
|
|
|
Добавлено: Чт июн 14, 2018 20:56 |
|
|
|
|
|
Заголовок сообщения: |
Re: Задача: симметричны ли точки на плоскости |
|
|
А подразумевается ли помимо вертикали и горизонтали диагональ? Или "углы" менее 45 градусов?
А подразумевается ли помимо вертикали и горизонтали диагональ? Или "углы" менее 45 градусов?
|
|
|
|
Добавлено: Чт июн 14, 2018 15:00 |
|
|
|
|
|
Заголовок сообщения: |
Re: Задача: симметричны ли точки на плоскости |
|
|
А есть вариант, когда не используется плавающая точка?
А есть вариант, когда не используется плавающая точка?
|
|
|
|
Добавлено: Чт июн 14, 2018 14:46 |
|
|
|
|
|
Заголовок сообщения: |
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 ;
[code]\ на 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 ;[/code]
|
|
|
|
Добавлено: Чт июн 14, 2018 10:51 |
|
|
|
|
|
Заголовок сообщения: |
Re: Задача: симметричны ли точки на плоскости |
|
|
F-MAP писал(а): Допустим, две точки совпадают, две расходятся, по ним согнуть лист, это не верное решение?
* | * | * | | * Вот в этом варианте явно несимметрично.
[quote="F-MAP"]Допустим, две точки совпадают, две расходятся, по ним согнуть лист, это не верное решение? [/quote] * | * | * | | *
Вот в этом варианте явно несимметрично.
|
|
|
|
Добавлено: Ср июн 13, 2018 22:57 |
|
|
|
|
|
Заголовок сообщения: |
Re: Задача: симметричны ли точки на плоскости |
|
|
Допустим, две точки совпадают, две расходятся, по ним согнуть лист, это не верное решение?
Допустим, две точки совпадают, две расходятся, по ним согнуть лист, это не верное решение?
|
|
|
|
Добавлено: Ср июн 13, 2018 22:52 |
|
|
|
|
|
Заголовок сообщения: |
Re: Задача: симметричны ли точки на плоскости |
|
|
F-MAP писал(а): Уточните задачу, симметричная прямая не должна проходить не по одной точке?
Там указано - "пары точек". Т.е. если лист бумаги "перегнуть" по какой-то прямой, то две точки наложатся на другие две.
[quote="F-MAP"]Уточните задачу, симметричная прямая не должна проходить не по одной точке? [/quote] Там указано - "пары точек". Т.е. если лист бумаги "перегнуть" по какой-то прямой, то две точки наложатся на другие две.
|
|
|
|
Добавлено: Ср июн 13, 2018 22:47 |
|
|
|
|
|
Заголовок сообщения: |
Re: Задача: симметричны ли точки на плоскости |
|
|
Уточните задачу, симметричная прямая не должна проходить не по одной точке?
Уточните задачу, симметричная прямая не должна проходить не по одной точке?
|
|
|
|
Добавлено: Ср июн 13, 2018 22:41 |
|
|
|
|
|
Заголовок сообщения: |
Задача: симметричны ли точки на плоскости |
|
|
Даны целочисленные координаты четырех точек в двумерном пространстве. Составить программу, которая определит, существует ли прямая, относительно которой пары точек будут располагаться симметрично.
Даны целочисленные координаты четырех точек в двумерном пространстве. Составить программу, которая определит, существует ли прямая, относительно которой пары точек будут располагаться симметрично.
|
|
|
|
Добавлено: Ср июн 13, 2018 21:41 |
|
|
|