У меня есть координаты точки pos = (x, y), и мне нужно проверить, является ли она частью прямой, проходящей через две точки p1 = (x1, y1), p2 = (x2, y2). Формула, которую я использую, Y-y1 = ((x-x1)/(x2 - x1)) * (y2-y1), а код:
Пока я тестировал его, я заметил, что прямая линия наклона противоположна. image
Я получил это, проверив каждую точку холста (используя tkinter):
p1 = (313, 215)
p2 = (92, 44)
for x in range(0, 400):
for y in range(0, 300):
if y - p1[1] - 5 <= ((x - p1[0]) / (p2[0] - p1[0])) * (p2[1] - p1[1]) <= y - p1[1] + 5:
canvas.create_oval(x, y, x, y)
Самая большая из них-это линия, которая представлена приведенным выше уравнением, нарисованная от руки-это то, что я хочу.
Я пытался также протестировать его на geogebra, но там все работает properly...what я missimg?
Источник
Matteo Secco
3 ответа
Ваша математика, кажется, верна, поскольку проблема заключается в интерпретации.
Во-первых, вы могли бы немного упростить математику:
x1,y1 = p1
x2,y2 = p2
m = (y2-y1)/(x2-x1)
def f(x): return y1 + m*(x-x1)
def test(x,y,tol = 10):
return abs(y-f(x)) <= tol
А потом просто используйте test(x,y) или test(*pol) .
Проблема в том, что в координатах холста увеличение y фактически перемещает вас вниз по холсту. В вашем примере данных линия нарисована правильно в том смысле, что отрезок линии, соединяющий точки холста (313, 215) и (92,44) , является убывающей линией.
Возможно, вы хотите построить точки как (x,300-y) , а не (x,y) .
John Coleman
сравните наклон любых соседних точек, имеющих одинаковый наклон. это может быть достигнуто путем сравнения наклона каждой пары последовательных точек
Тут одна параболf
когда квадратный трёхчлен записан в виде произведения то это означает:
ах²+bx+c= a(x-x₁)(x-x₂)- что тут указаны корни уравнения ах²+bx+c=0, то есть точки пересечения параболы с осью ОХ.
1)у= - (х-2)(х+4)- означает, что а<0 - ветви параболы направлены вниз,
2)точки с координатами (-4;0) и (2;0)- точки персечения графика с осью ОХ
3) легко найти ось симметрии она находится посередине между точками -4 и 2 , а акже параллельна оси ОУ
х= (-4+2):2= - 1 запишем отдельно:
х= -1
Для построения графика надо найти ординату вершины
уВ(-1)= - (-1-2)(-1+4) = - (-3)*3=9
координаты вершины (-1;9)
и найдём точку пересечения с осью ординат при х=0
у= - (0-2)(0+4)=8
точка пересечения с осью ОУ (0;8)
График в файле
проверка : -(х-2)(х+4)= - (х²+4х-2х-8)= - х²-2х+8
график и все тоски идентичны
У меня есть координаты точки pos = (x, y), и мне нужно проверить, является ли она частью прямой, проходящей через две точки p1 = (x1, y1), p2 = (x2, y2). Формула, которую я использую, Y-y1 = ((x-x1)/(x2 - x1)) * (y2-y1), а код:
if pos[1] - p1[1] - 10 <= ((pos[0] - p1[0]) / (p2[0] - p1[0])) * (p2[1] - p1[1]) <= pos[1] - p1[1] + 10:
return True
Пока я тестировал его, я заметил, что прямая линия наклона противоположна. image
Я получил это, проверив каждую точку холста (используя tkinter):
p1 = (313, 215)
p2 = (92, 44)
for x in range(0, 400):
for y in range(0, 300):
if y - p1[1] - 5 <= ((x - p1[0]) / (p2[0] - p1[0])) * (p2[1] - p1[1]) <= y - p1[1] + 5:
canvas.create_oval(x, y, x, y)
Самая большая из них-это линия, которая представлена приведенным выше уравнением, нарисованная от руки-это то, что я хочу.
Я пытался также протестировать его на geogebra, но там все работает properly...what я missimg?
Источник
Matteo Secco
3 ответа
Ваша математика, кажется, верна, поскольку проблема заключается в интерпретации.
Во-первых, вы могли бы немного упростить математику:
x1,y1 = p1
x2,y2 = p2
m = (y2-y1)/(x2-x1)
def f(x): return y1 + m*(x-x1)
def test(x,y,tol = 10):
return abs(y-f(x)) <= tol
А потом просто используйте test(x,y) или test(*pol) .
Проблема в том, что в координатах холста увеличение y фактически перемещает вас вниз по холсту. В вашем примере данных линия нарисована правильно в том смысле, что отрезок линии, соединяющий точки холста (313, 215) и (92,44) , является убывающей линией.
Возможно, вы хотите построить точки как (x,300-y) , а не (x,y) .
John Coleman
сравните наклон любых соседних точек, имеющих одинаковый наклон. это может быть достигнуто путем сравнения наклона каждой пары последовательных точек
если есть три точки (x1, y1)(x2, y2)(x3,y3)
(y2-y1) (x3-x2) = (y3-y2) (x2-x1)
продолжайте по всем пунктам до завершения