Тема: Line
Показать сообщение отдельно
Старый 22.12.2008, 16:19   #4
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений
(для 15,675 пользователей)
Ответ: Line

Держи, тут, оказывается, даже с каментами:

Function  ABLine(startX,startY,endX,endY)
	Local K#,B
	FuncX = EndX - StartX ; Вычисляем абсолютное направление отрезка, как бы
	FuncY = EndY - StartY ; Передвигая центр координат под стартовую точку
	If FuncX <> 0 K = FuncY/Float(FuncX) ; Таким образом, мы избавились от B и можем вычислить K - отношение Y к X
	; Теперь, зная К, можно вычислить B, для этого изменяем алгебр. функцию Y=K*X+B, выражая из неё B:
	B = StartY-K*StartX
	; Ну что ж, теперь у нас есть K и B. Можно приступить к построению линии
	If StartX < EndX 
		MinX = StartX 
		MaxX = EndX
	Else
		MinX = EndX
		MaxX = StartX
	End If
	; Игрек тож
	If StartY < EndY
		MinY = StartY 
		MaxY = EndY
	Else
		MinY = EndY
		MaxY = StartY
	End If
	
	If MinX = MaxX ; Если стартовый икс и конечный Икс равны, т.е. линия вертикальна...
		For Y=MinY To MaxY; Берём каждое значение Х в пределах указанного отрезка
			X = MaxX ; ТО у Икс всегда одно и то же значение
			Plot (X,Y) ; Рисуем точку по рассчитанным координатам
		Next
	Else
		For X=MinX To MaxX; Берём каждое значение Х в пределах указанного отрезка
			Y = K*X+B ; Вычисляем Y
			If Y>= MinY And Y<= MaxY Plot (X,Y) ; Рисуем точку по рассчитанным координатам
		Next
	
		; Бугага! Одного Икса оказалось недостаточно! Нада теперяче сделать чтоб и по Y тоже рисовалось...
	
		For Y=MinY To MaxY; Берём каждое значение Х в пределах указанного отрезка
			X = (Y-B)/K  ; Вычисляем Y
			If X>= MinX And X<= MaxX Plot (X,Y) ; Рисуем точку по рассчитанным координатам
		Next
	End If
	; Должно работать :)
End Function
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**

* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена

(Offline)
 
Ответить с цитированием