dlinyj
@dlinyj

Как в Gnplot построить прямую по двум точкам?

Приветствую всех.

Вчера пытался нахрапом решить задачу построения прямой по двум точкам. Есть такой файл data.txt следующего содержания:

#y1    x1    y2    x2    y3    x3
1888  4680  915  4438  660  3288
1887  4668  915  4425  662  3275


Где каждая пара столбцов - это координата двух точек. Я хочу графически решить задачу пересечениях этих прямых. И что-то с разбегу не удалось решить задачу.

Скрипт составил примерно такой:

#! /usr/bin/gnuplot -persist
set terminal postscript eps enhanced color solid
set output "result.ps"
set grid xtics ytics
set xlabel "X" 
set ylabel "Z"
#set xrange [3200:3300]
#set yrange [500:700]
set style line 1 lt 1 lw 1
...


Если применить очевидное решение, и записать:

plot 'data.txt' using 0:1 with lines, '' using 2:3 with lines, '' using 4:5  with lines


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

plot 0.85*x+350.35, (-0.136)*x-509.045, -0.076*x-492.6, 6*x+6652, "< echo ‘1145 -300’" with points ls 1
#Пример не отсюда, последнее - предположительная точка пересечения


Но на мой взгляд - это не самое изящное решение. Как мне кажется решение должно быть тривиальным, но я его не вижу.

Один из вариантов, который я подглядел в другом месте - это рисование решённого уравнения:

x1 = 1 # first point 
y1 = 3 
x2 = 2 # second point 
y2 = 5 
f(x) = (y2-y1)/(x2-x1)*x + y2 - x2*(y2-y1)/(x2-x1) 
plot [x1:x2] f(x)


Осталось только понять, как заносить значения в x1,y1, y2, x2.

Быть может я тупил в ночи, и всё значительно проще?

P.S. Это задача поиска подземной крепости в Майнкрафт. Первая координата - точка броска ока Края, вторая - точка её падения. Точка пересечения прямых - ориентировочное местоположение крепости. Метод опробован и вполне хорошо ищет с заданной погрешностью (которая меньше размеров крепости).
  • Вопрос задан
  • 3531 просмотр
Пригласить эксперта
Ответы на вопрос 1
@sergregory
Посмотри вот здесь: Записки дебианщика.

Идея такая: задаём уравнение прямой в общем виде и аппроксимируем его используя известные точки. Поскольку точек всего две, прямая гарантированно пройдёт через них.

Скрипт будет примерно такой:
f1(x)=(a*x)+b
f2(x)=(c*x)+d
fit f1(x) "data.txt" using 2:1 via a,b
fit f2(x) "data.txt" using 4:3 via c,d
plot f1(x) with line linestyle 1, f2(x) with line linestyle 2
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы