Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Пт мар 29, 2024 01:26

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Ответить
Имя пользователя:
Заголовок:
Текст сообщения:
Введите текст вашего сообщения. Длина сообщения в символах не более: 60000

Размер шрифта:
Цвет шрифта
Настройки:
BBCode ВКЛЮЧЕН
[img] ВЫКЛЮЧЕН
[flash] ВЫКЛЮЧЕН
[url] ВКЛЮЧЕН
Смайлики ВЫКЛЮЧЕНЫ
Отключить в этом сообщении BBCode
Не преобразовывать адреса URL в ссылки
Вопрос
Теперь гостю придется вводить здесь пароль. Не от своей учетной записи, а ПАРОЛЬ ДЛЯ ГОСТЯ, получить который можно после регистрации на форуме через ЛС.:
Этот вопрос предназначен для выявления и предотвращения автоматических регистраций.
   

Обзор темы - Задача: симметричны ли точки на плоскости
Автор Сообщение
  Заголовок сообщения:  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 =
;
Сообщение Добавлено: Чт июн 14, 2018 20:56
  Заголовок сообщения:  Re: Задача: симметричны ли точки на плоскости  Ответить с цитатой
А подразумевается ли помимо вертикали и горизонтали диагональ?
Или "углы" менее 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
;
Сообщение Добавлено: Чт июн 14, 2018 10:51
  Заголовок сообщения:  Re: Задача: симметричны ли точки на плоскости  Ответить с цитатой
F-MAP писал(а):
Допустим, две точки совпадают, две расходятся, по ним согнуть лист, это не верное решение?

*
|
* | *
|
|
*

Вот в этом варианте явно несимметрично.
Сообщение Добавлено: Ср июн 13, 2018 22:57
  Заголовок сообщения:  Re: Задача: симметричны ли точки на плоскости  Ответить с цитатой
Допустим, две точки совпадают, две расходятся, по ним согнуть лист, это не верное решение?
Сообщение Добавлено: Ср июн 13, 2018 22:52
  Заголовок сообщения:  Re: Задача: симметричны ли точки на плоскости  Ответить с цитатой
F-MAP писал(а):
Уточните задачу, симметричная прямая не должна проходить не по одной точке?

Там указано - "пары точек". Т.е. если лист бумаги "перегнуть" по какой-то прямой, то две точки наложатся на другие две.
Сообщение Добавлено: Ср июн 13, 2018 22:47
  Заголовок сообщения:  Re: Задача: симметричны ли точки на плоскости  Ответить с цитатой
Уточните задачу, симметричная прямая не должна проходить не по одной точке?
Сообщение Добавлено: Ср июн 13, 2018 22:41
  Заголовок сообщения:  Задача: симметричны ли точки на плоскости  Ответить с цитатой
Даны целочисленные координаты четырех точек в двумерном пространстве. Составить программу, которая определит, существует ли прямая, относительно которой пары точек будут располагаться симметрично.
Сообщение Добавлено: Ср июн 13, 2018 21:41

Часовой пояс: UTC + 3 часа [ Летнее время ]


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB