Консультация № 190706
16.03.2017, 08:52
0.00 руб.
0 48 1
Уважаемые эксперты! Пожалуйста, ответьте на вопрос:

Я неплохо разбираюсь в математике, но испытываю трудности с геометрией и возникла такая задача, которая вроде простая, но сам сообразить не могу.

Дано:
У нас есть плоскость координат XY, на этой плоскости проведен отрезок, который никогда не является строго вертикальным или строго горизонтальным, всегда имеет определенный угол к осям координат.
Так же у нас есть несколько точек которые входят в область отрезка по оси Х и могут быть как выше отрезка так и ниже его.
Нам известны только координаты крайних точек отрезка (А и В) и координаты каждой точки.

Что нужно:
Нужно определить какие точки лежат выше отрезка, а какие ниже. По сути нужно просто математическая формула и все.

Дополнительно:
Больше не знаю какую еще информацию можно дать, спрашивайте, если что.

Картинка:

Обсуждение

давно
Модератор
137394
1850
17.03.2017, 16:40
общий
17.03.2017, 17:12
Адресаты:
Мы должны быть сами себе проверяющими, если правильно понимаем задачу.
Зенченко Константин Николаевич по другому поводу привёл полезный пример. Повторюсь: имеем координаты двух крайних точек прямой
и
тогда:

Для точки имеем:

Так как я, как всем известно, и я этого не скрываю, склонен ошибаться, то проверим:
Пусть

тогда

тогда

То есть элементарная проверка проходит успешно.
Не берусь вчитываться в вашу формулу, попробуйте сами, такая проверка у Вас проходит?

Ставим реальные X точки в уравнение, и и если Y>y то точка выше прямой, иначе - ниже
Вот я Вам наваял простейший vbs-скрипт для проверки
Код:
time1 = 1
time2 = 365

price1 = 10
price2 = 3650

Answer = " Исходные данные прямой:"
Answer = Answer + vbCrLf + "time1= " + CStr(time1)
Answer = Answer + vbCrLf + "time2= " + CStr(time2)
Answer = Answer + vbCrLf + "price1= " + CStr(price1)
Answer = Answer + vbCrLf + "price2= " + CStr(price2)
Answer = Answer + vbCrLf


Do
Ttime = InputBox(Answer + vbCrLf + "Ведите координату Ttime точки")
If Ttime = "" Then Exit Do
Ttime = CDbl(Replace(Ttime, ".", ","))

Answer1 = Answer + vbCrLf + " Исходные данные точки:"
Answer1 = Answer1 + vbCrLf + "Ttime= " + CStr(Ttime)

Tprice = InputBox(Answer1 + vbCrLf + "Введите координату Tprice точки")
If Tprice = "" Then Exit Do
Tprice = CDbl(Replace(Tprice, ".", ","))

Price = price1 + (Ttime - time1) * (price2 - price1) / (time2 - time1)

Answer1 = Answer1 + vbCrLf + "Tprice= " + CStr(Tprice)
Answer1 = Answer1 + vbCrLf
Answer1 = Answer1 + vbCrLf + " Ответ:"
Answer1 = Answer1 + vbCrLf + "Для точки на прямой Ttime= " + CStr(Ttime)
Answer1 = Answer1 + vbCrLf + " Price= " + CStr(Price)

If Tprice = Price Then Znak = "="
If Tprice < Price Then Znak = "<"
If Tprice > Price Then Znak = ">"

Answer1 = Answer1 + vbCrLf + "Tprice=" + CStr(Tprice) + Znak + "Price=" + CStr(Price)
MsgBox Answer1
Loop
Сохраните код, например, блокнотом с расширением .vbs и запустите на выполнение, для этого в систему ничего доустанавливать не нужно.
Можете сами изменить исходные данные, формула работает.
Она в одну строчку
Код:
Price = price1 + (Ttime - time1) * (price2 - price1) / (time2 - time1)
Всё остальное - ввод-вывод
Ваши выкладки тяжело читать. Мне привычней терминология x,y В чём загвоздка обозначить:






А вот в программах там уже по готовым формулам можно писать всё что нравится.

Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
давно
Модератор
137394
1850
17.03.2017, 16:59
общий
На всякий случай прикрепляю скрипт, переименуйте его в файл с расширением .vbs
Прикрепленные файлы:
2e61ead1f31e0ec32231f312745d4730.txt
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
давно
Модератор
137394
1850
17.03.2017, 17:09
общий
Адресаты:
Можно, наверное, это изобразить в Excel графиками, но не чувствую моральных сил продолжать, не понимая, зачем это всё нужно.
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
давно
Студент
400526
136
20.03.2017, 06:54
общий
[q=137394][/q]
Спасибо вам огромное, что вы заморочились так подробно все расписали, мне на самом деле хватило того, что было до этого. Сейчас мне нужно найти совсем другие ошибки решить другие проблемы, которые к теме конкретно этого вопроса уже отношения не имеет.
давно
Посетитель
7438
7205
25.03.2017, 10:32
общий
Адресаты:
Какова судьба Вашей задачи?
Другие ошибки найдены?
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Студент
400526
136
25.03.2017, 17:38
общий
Цитата: Лысков Игорь Витальевич
Какова судьба Вашей задачи?
Другие ошибки найдены?

Пока по неизвестной мне причине, программа в некоторых местах считает не правильно, хотя я подозревая, что это особенность платформы.
Конкретнее не могу объяснить, слишком сложно... )))
давно
Модератор
137394
1850
25.03.2017, 17:56
общий
Адресаты:
программа в некоторых местах считает не правильно,
Надеюсь, Ваша программа, не моя? Если моя, то при каких данных? Моё твёрдое убеждение, ищи у себя а не на платформе.
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
давно
Студент
400526
136
26.03.2017, 05:20
общий
Цитата: Megaloman
Надеюсь, Ваша программа, не моя? smile Если моя, то при каких данных? Моё твёрдое убеждение, ищи у себя а не на платформе.

Постараюсь, конечно сначала у себя ошибку поискать, а потом проверить результаты расчетов вручную...
давно
Студент
400526
136
26.03.2017, 05:26
общий
Если успею, то отпишу сюда в форум о результатах ручной проверки, но это может быть не скоро.
А когда консультация закроется в этот форум можно будет дальше писать? Если да, то обязательно напишу...
давно
Студент
400526
136
26.03.2017, 06:16
общий
Результаты ручной проверки ничего не дали, так как получаются слишком большие числа, на калькуляторе посчитать невозможно.
Пробовал сделать расчеты с помощью самой платформы, но вместо нормальных чисел с плавающей точкой, он мне выдает что-то типа: "1е-08"
давно
Мастер-Эксперт
17387
18345
26.03.2017, 06:41
общий
это ответ
Здравствуйте, SAW!

Если заданы точки и требуется установить, расположена ли точка абсцисса которой не меньше меньшей и не больше большей из абсцисс первых двух точек, выше или ниже отрезка то при

точка расположена выше отрезка при

точка расположена ниже отрезка
5
Об авторе:
Facta loquuntur.
давно
Мастер-Эксперт
17387
18345
26.03.2017, 07:55
общий
Адресаты:

В записанном Вами коде предусмотрена проверка того, что абсцисса точки не меньше меньшей и не больше большей из абсцисс точек и ?
Цитата: demid088
Пробовал сделать расчеты с помощью самой платформы, но вместо нормальных чисел с плавающей точкой, он мне выдает что-то типа: "1е-08"

"Он" выдал Вам число
Об авторе:
Facta loquuntur.
давно
Студент
400526
136
26.03.2017, 08:32
общий
26.03.2017, 08:32
Цитата: Гордиенко Андрей Владимирович
В записанном Вами коде предусмотрена проверка того, что абсцисса точки не меньше меньшей и не больше большей из абсцисс точек и ?

Да.

Цитата: Гордиенко Андрей Владимирович
"Он" выдал Вам число

Это я понял, только похоже он сам не хочет с этими числами правильно работать, формула то простая...
давно
Мастер-Эксперт
17387
18345
26.03.2017, 08:41
общий
Адресаты:
Цитата: demid088
Это я понял, только похоже он сам не хочет с этими числами правильно работать, формула то простая...

Я думаю, что есть специалисты, знающие язык программирования используемой Вами платформы и могущие Вам помочь. Посмотрите, есть ли на нашем портале соответствующий раздел, и задайте вопрос туда. Если такого раздела нет, то попробуйте обратиться за помощью на форумы программистов в Интернете.
Об авторе:
Facta loquuntur.
давно
Студент
400526
136
26.03.2017, 09:15
общий
Цитата: Гордиенко Андрей Владимирович
Я думаю, что есть специалисты, знающие язык программирования используемой Вами платформы и могущие Вам помочь. Посмотрите, есть ли на нашем портале соответствующий раздел, и задайте вопрос туда. Если такого раздела нет, то попробуйте обратиться за помощью на форумы программистов в Интернете.

Это понятно, теперь мне путь только туда остался, но я уже давно подозревал, что платформа слишком ограниченная, а разработчики особо не шевелятся, чтобы это исправить, сначала года уже решил сменить квалификацию.

Спасибо еще раз!
давно
Модератор
137394
1850
26.03.2017, 09:31
общий
26.03.2017, 09:33
Адресаты:
это непрофессиональный подход. Есть, с Вашей точки зрения, ошибка. Не надо рассуждать, надо искать её. Посчитать вручную? Это ведь не эпоха логарифмической линейки, есть Excel.
А в программе, уверен, какая бы платформа ни была, возможно разбить формулу на части, организовать отображение промежуточных результатов. Ошибку надо локализовать, а не рассуждать о платформе. Изнываю от любопытства, о чём идёт речь?
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
давно
Студент
400526
136
26.03.2017, 11:37
общий
26.03.2017, 11:37
Цитата: Megaloman
Посчитать вручную? Это ведь не эпоха логарифмической линейки, есть Excel.

Да там считать не так много, но попробую и в Excel.

Цитата: Megaloman
возможно разбить формулу на части, организовать отображение промежуточных результатов. Ошибку надо локализовать

Сейчас обратился на форум, если не помогут, то попробую этот способ, в принципе должно сработать. Спасибо!
давно
Посетитель
7438
7205
26.03.2017, 11:53
общий
Адресаты:
Цитата: Megaloman
Изнываю от любопытства, о чём идёт речь?
Ага, поделитесь же, наконец, что за платформа такая...
Цитата: demid088
А когда консультация закроется в этот форум можно будет дальше писать?
Можно. По теме данного вопроса пишите, сколько Вам захочется.
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Модератор
137394
1850
26.03.2017, 16:25
общий
Адресаты:
В записанном Вами коде предусмотрена проверка того, что абсцисса точки не меньше меньшей и не больше большей из абсцисс точек и ?
Позвольте с Вами не согласиться. Совершенно неважно, где находится точка, у уравнения пямой нет такого ограничения. Не важно, в каком виде записано уравнение (если оно, конечно правильн записано). Для уравнения прямой, проведенной через две точки, важно чтобы x1<>x2. Всё остальное неважно.
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
давно
Мастер-Эксперт
17387
18345
26.03.2017, 18:13
общий
Адресаты:
Можете не соглашаться. Я всё равно не собираюсь с Вами спорить. Но советую Вам прочитать написанное автором вопроса:
Цитата: demid088
Так же у нас есть несколько точек которые входят в область отрезка по оси Х и могут быть как выше отрезка так и ниже его.
Об авторе:
Facta loquuntur.
давно
Студент
400526
136
27.03.2017, 06:29
общий
Добрый день всем! )))
Сделал я все расчеты вручную и у меня получилось НЕ правильное число, на которое программа реагирует адекватно, т.е. в конечном счете НЕ правильно.

Привожу все расчеты:

напомню, у нас есть плоскость внизу ВРЕМЯ (Х) справа ЦЕНА (Y).
точки отрезка:
А (time1, price1)
B (time2, price2)


анализируемая точка
С (time3, price3)

далее расчеты
(буду делать вставки из кода с готовыми значениями, кто не поймет поясню...)

Дано:
time1 = 1464984000
time2 = 1465444800
time3 = 1465243200

price1 = 1.13728
price2 = 1.14148
price3 = 1.13921


опираемся на формулу
price = k*time + b;

выделяем из нее коэффициенты
k = (price2 - price1) / (time2 - time1);
b = price1 - k*time1;


k = (1.14148 - 1.13728) / (1465444800 - 1464984000) = 0.0042/460800 = 0.0000000091145833;
b = 1.13728 - 0.0000000091145833 * 1464984000 = 1.13728 - 13.3527187011672 = -12.2154387011672;

Далее, ищем цену точки на линии, которая соответствует времени нашей точки С
формула такая:
priceLine = k*time3 + b;

priceLine = 0.0000000091145833 * 1465243200 + -12.2154387011672 = 13,35508120115856 + -12.2154387011672 = 1,13964249999136;

округляем до 5-ти знаков:
priceLine = 1,13964;

В итоге мы получаем, что якобы точка С лежит НИЖЕ линии
1.13921 < 1,13964 (price3 < priceLine)

НО, реально на графике, точка лежит ВЫШЕ этой линии, т. к. реальная цена точки на линии соответствует = 1,13850
1.13921 > 1,13850 (price3 > priceLine)

[b]Не мог ли кто-нибудь посмотреть, может я где-то ошибся в расчетах!!![/b]
давно
Модератор
137394
1850
27.03.2017, 09:34
общий
27.03.2017, 09:39
Результат моего скрипта (могли бы и сами использовать)

Результат по расчетам Excel

Моё мнение: вы считываете неверные данные с графика либо Ваша пресловутая платформа неверно считает: при приведенных данных если платформа работает с 7, например, знаками, её расчёты будут кривыми.
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
давно
Модератор
137394
1850
27.03.2017, 10:15
общий
Адресаты:
Решим обратную задачу: найдём x (у Вас time) по имеющемуся y (у Вас price)

Результат вычисления по Вашим данным

То есть, для формулы расчёта, либо координаты точки заданы неверно, либо координаты точек прямой неверны.
Арифметика (при достаточной точности расчётов) врать не может.


Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
давно
Студент
400526
136
27.03.2017, 10:53
общий
Цитата: Megaloman
Моё мнение: вы считываете неверные данные с графика

Цитата: Megaloman
То есть, для формулы расчёта, либо координаты точки заданы неверно, либо координаты точек прямой неверны.

У меня тоже такие мысли возникли, сейчас проверю все данные еще на раз...
давно
Студент
400526
136
27.03.2017, 10:54
общий
Адресаты:
Спасибо, что проверили мои расчеты, мне было важно знать, что я сам не ошибся, по крайней мере в этом.
давно
Студент
400526
136
27.03.2017, 13:15
общий
ВСЕМ ОГРОМНОЕ СПАСИБО!!!
Я нашел ошибку, дело все в том, что на оси абсцисс есть разрывы в данных, это особенность такая заложенная разработчиками и как уже это исправить я пока не знаю, но это уже другая проблема, буду решать отдельно если понадобиться.

А формула считает вроде правильно, проверил часть вручную и наткнулся на разрыв в данных, там сбой то и произошел, отрезок в формуле как бы прыгнул сильно вверх. )))

Вот такие дела....
давно
Модератор
137394
1850
27.03.2017, 13:25
общий
Адресаты:
Может, интерполяцию применить?
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
давно
Студент
400526
136
27.03.2017, 14:02
общий
Цитата: Megaloman
Может, интерполяцию применить?

Это как?
давно
Модератор
137394
1850
27.03.2017, 14:19
общий
Адресаты:
Интерполяция -это здесь Сложно рассуждать, когда Вы так тщательно скрываете подробности задачи. Но если не хватает данных, их можно с некоторой степенью достоверности предугадать. Гогда Вы рисуете карандашом график по точкам, Вы занимаетесь интерполяцией. Существуют мат методы для получения значений функции по имеющимся данным.
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
давно
Студент
400526
136
08.04.2017, 04:16
общий
Добрый день, все!
Я пока не уверен на 100%, но проблема вроде как решилась.
Дело в том, что у каждой точки рядом с отрезком есть свой порядковый номер, так вот мне порекомендовали вместо времени (time) использовать этот порядковый номер в формуле. После этого расчеты вроде стали точнее, но мы их до сих пор на 100% не проверили поэтому я и не писал.
Если будут еще новости, то напишу...
Форма ответа