Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт мар 28, 2024 17:22

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: Задача: симметричны ли точки на плоскости
СообщениеДобавлено: Ср июн 13, 2018 21:41 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Даны целочисленные координаты четырех точек в двумерном пространстве. Составить программу, которая определит, существует ли прямая, относительно которой пары точек будут располагаться симметрично.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Задача: симметричны ли точки на плоскости
СообщениеДобавлено: Ср июн 13, 2018 22:41 
Не в сети

Зарегистрирован: Пт июн 06, 2008 14:21
Сообщения: 128
Откуда: Карелия
Благодарил (а): 1 раз.
Поблагодарили: 4 раз.
Уточните задачу, симметричная прямая не должна проходить не по одной точке?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Задача: симметричны ли точки на плоскости
СообщениеДобавлено: Ср июн 13, 2018 22:47 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
F-MAP писал(а):
Уточните задачу, симметричная прямая не должна проходить не по одной точке?

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Задача: симметричны ли точки на плоскости
СообщениеДобавлено: Ср июн 13, 2018 22:52 
Не в сети

Зарегистрирован: Пт июн 06, 2008 14:21
Сообщения: 128
Откуда: Карелия
Благодарил (а): 1 раз.
Поблагодарили: 4 раз.
Допустим, две точки совпадают, две расходятся, по ним согнуть лист, это не верное решение?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Задача: симметричны ли точки на плоскости
СообщениеДобавлено: Ср июн 13, 2018 22:57 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
F-MAP писал(а):
Допустим, две точки совпадают, две расходятся, по ним согнуть лист, это не верное решение?

*
|
* | *
|
|
*

Вот в этом варианте явно несимметрично.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Задача: симметричны ли точки на плоскости
СообщениеДобавлено: Чт июн 14, 2018 10:51 
Не в сети

Зарегистрирован: Пт июн 06, 2008 14:21
Сообщения: 128
Откуда: Карелия
Благодарил (а): 1 раз.
Поблагодарили: 4 раз.
Код:
\ на 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
;


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Задача: симметричны ли точки на плоскости
СообщениеДобавлено: Чт июн 14, 2018 14:46 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
А есть вариант, когда не используется плавающая точка?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Задача: симметричны ли точки на плоскости
СообщениеДобавлено: Чт июн 14, 2018 15:00 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
А подразумевается ли помимо вертикали и горизонтали диагональ?
Или "углы" менее 45 градусов?

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Задача: симметричны ли точки на плоскости
СообщениеДобавлено: Чт июн 14, 2018 20:56 
Не в сети

Зарегистрирован: Пт июн 06, 2008 14:21
Сообщения: 128
Откуда: Карелия
Благодарил (а): 1 раз.
Поблагодарили: 4 раз.
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 =
;


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

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


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

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