Рисование прямой линии между двумя точками

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

Если у меня есть два момента:

(x1,y1) (x2,y2)

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

def straightLine(picture):
 height = getHeight(picture)
 width = getWidth(picture)
 newPicture = makeEmptyPicture(width, height)
 x1=//some value
 y1=//some value
 x2=//some value
 y2=//some value

 for y in range(0, height):
 for x in range(0, width):
 pxl = getPixel(picture,x,y)
 newPxl = getPixel(picture,x,y)
 color = getColor(pxl)
 setColor(newPxl,color)

 return picture
1 ответ

Для нахождения линии между двумя точками вам нужно использовать следующую формулу .

(У-у0)/(у1-у0) = (х-х0)/(х1-х0)

В моем коде я использовал x1,y1 и x2,y2 представляющий первую и вторую точки входа пользователя.

Управлять приведенным выше уравнением для решения для x следующим образом:

def drawAnyLine(p):
 w= getWidth(p)
 h= getHeight(p)
 newPic= makeEmptyPicture(w,h)
 x1=requestIntegerInRange("Enter x1 between 1 and " , 1,w)
 y1=requestIntegerInRange("Enter y1 between 1 and " , 1,h)
 x2=requestIntegerInRange ("Enter x2 between 1 and ", 1, w)
 y2=requestIntegerInRange("Enter y2 between 1 and ", 1, h)

 for y in range (y1,y2):
 for x in range (x1,x2):
 x = (y-y1)*(x2-x1)/(y2-y1) +x1
 pxl = getPixel(p, x, y)
 newPxl= getPixel(newPic,x,y)
 color = getColor(pxl)
 setColor ( newPxl, color)
 return (newPic)

licensed under cc by-sa 3.0 with attribution.