Бывает текст вставляешь, и из за чего то подсветка портится.. мб заносит что то.. или какие невидимые символы
Should

MpW, сколько я себе голову сломал. У тебя в примере InterLineLine в самом конце грубая синтаксическая ошибка, конец строки заново открывается, он переставал считать это Lua
Остальное починил и обновил
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
27
Я еще c++ скидывал. Но там наверн отдельная история, мб вы не предусматривали на этом языке. Программа что может анализировать на ком языке пишут?

ScorpioT1000, можно было библиотеку оуа подсвечивать. Типа math.cos или math.sin. Тут получается math.cos
38
Я понял, там не предусмотрены точка с запятой. Вообще, в луа редко это юзают
27
Я понял, там не предусмотрены точка с запятой. Вообще, в луа редко это юзают
Ну юзается, не юзается, просто смотрится не красиво. Нельхя ли спереть стиль у какого нибудь редактора, типа vs code
35
Should
Не крит, но вся подсветка кода должна работать
38
MpW, сколько я себе голову сломал. У тебя в примере InterLineLine в самом конце грубая синтаксическая ошибка, конец строки заново открывается, он переставал считать это Lua
Остальное починил и обновил
Принятый ответ
38
ошибка здесь
Загруженные файлы
27
Круто))
Кстати почему вот здесь подсветка не работает?
function InterLineLine(x1,y1,x2,y2,a1,b1,a2,b2)
    local p = (x2-x1)*(b2-b1)-(y2-y1)*(a2-a1)
    local x,y

    if ( p == 0 ) then --отрезки параллельны
        return false
    end

    x =  ((x2-x1)*(a2-a1)*(y1-b1)+(x2-x1)*(b2-b1)*a1-(y2-y1)*(a2-a1)*x1)/p
    y = -((y2-y1)*(b2-b1)*(x1-a1)+(y2-y1)*(a2-a1)*b1-(x2-x1)*(b2-b1)*y1)/p
    return x,y
end
function IsPointOnBeam2(x,y,x1,y1,x2,y2)
	return ((x-x1)*(y2-y1) == (x2-x1)*(y-y1)) and ((x-x1) * (x2-x1) >= 0) and ((y-y1)*(y2-y1) >= 0)
end

function IsPointInSegment(x,y,x1,y1,x2,y2)
	return((x1-x)^2+(y1-y)^2)^0.5 + ((x2-x)^2+(y2-y)^2)^0.5 == ((x2-x1)^2+(y2-y1)^2)^0.5 
end

function RayIntersectSegment(rayx,rayy,dirx,diry,x1,y1,x2,y2)
	--находим точку пересечения прямых
	local x,y=InterLineLine(rayx,rayy,dirx,diry,x1,y1,x2,y2)
	
	if x then
		--проверка, что точка пересечения на отрезке, и принадлежит лучу
		return IsPointInSegment(x,y,x1,y1,x2,y2)and IsPointOnBeam2(x,y,rayx,rayy,dirx,diry)
	else
		--иначе, если прямые не пересекаются, то точки пересечения нет.
		--если луч и отрезок лежат на одной линии
		return IsPointOnBeam2(x1,y1,rayx,rayy,dirx,diry) and IsPointOnBeam2(x2,y2,rayx,rayy,dirx,diry)
	end
	
	return false
end
print('p1=1: '..tostring(RayIntersectSegment(0,0,0,1,100,0,-100,0))..' луч направлен вверх, луч пересекает горизонтальный отрезок') 
print('p1=0: '..tostring(RayIntersectSegment(0,0,0,1,100,-1,-100,-1))..' луч направлен вверх, луч не пересекает горизонтальный отрезок, расположенный ниже'')

Ок понял😅

ScorpioT1000, ок понял. Тут сильно изменили сайт. Теперь непривычно. Нажимаешь на ник, и тебя перенаправляют на профиль, вместо ответа. Раньше это было цитирование всего сообщения, боялся этой кнопки как огня
Ответы (2)
38
MpW, я же выше написал, у тебя синтаксическая ошибка
Код без ошибки:
function InterLineLine(x1,y1,x2,y2,a1,b1,a2,b2)
    local p = (x2-x1)*(b2-b1)-(y2-y1)*(a2-a1)
    local x,y

    if ( p == 0 ) then --отрезки параллельны
        return false
    end

    x =  ((x2-x1)*(a2-a1)*(y1-b1)+(x2-x1)*(b2-b1)*a1-(y2-y1)*(a2-a1)*x1)/p
    y = -((y2-y1)*(b2-b1)*(x1-a1)+(y2-y1)*(a2-a1)*b1-(x2-x1)*(b2-b1)*y1)/p
    return x,y
end
function IsPointOnBeam2(x,y,x1,y1,x2,y2)
	return ((x-x1)*(y2-y1) == (x2-x1)*(y-y1)) and ((x-x1) * (x2-x1) >= 0) and ((y-y1)*(y2-y1) >= 0)
end

function IsPointInSegment(x,y,x1,y1,x2,y2)
	return((x1-x)^2+(y1-y)^2)^0.5 + ((x2-x)^2+(y2-y)^2)^0.5 == ((x2-x1)^2+(y2-y1)^2)^0.5 
end

function RayIntersectSegment(rayx,rayy,dirx,diry,x1,y1,x2,y2)
	--находим точку пересечения прямых
	local x,y=InterLineLine(rayx,rayy,dirx,diry,x1,y1,x2,y2)
	
	if x then
		--проверка, что точка пересечения на отрезке, и принадлежит лучу
		return IsPointInSegment(x,y,x1,y1,x2,y2)and IsPointOnBeam2(x,y,rayx,rayy,dirx,diry)
	else
		--иначе, если прямые не пересекаются, то точки пересечения нет.
		--если луч и отрезок лежат на одной линии
		return IsPointOnBeam2(x1,y1,rayx,rayy,dirx,diry) and IsPointOnBeam2(x2,y2,rayx,rayy,dirx,diry)
	end
	
	return false
end
print('p1=1: '..tostring(RayIntersectSegment(0,0,0,1,100,0,-100,0))..' луч направлен вверх, луч пересекает горизонтальный отрезок') 
print('p1=0: '..tostring(RayIntersectSegment(0,0,0,1,100,-1,-100,-1))..' луч направлен вверх, луч не пересекает горизонтальный отрезок, расположенный ниже')
27
ScorpioT1000, ок понял. Тут сильно изменили сайт. Теперь непривычно. Нажимаешь на ник, и тебя перенаправляют на профиль, вместо ответа. Раньше это было цитирование всего сообщения, боялся этой кнопки как огня
27
Есть проблема
Комменты в конце неправильно экранирует
--[[закомментировано
в
несколько
строк
]]

эта часть не закомментируется --[[а эта -- закомментируется]] а вот эта уже нет
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.