수학 라이브러리 예제
개요
코사인, 사인 등의 삼각함수와 상용로그, 제곱근 등의 수학함수 등을 피니엔진에서 사용하게 할 수 있는 수학 라이브러리 예제입니다.
사용 방법은, module 폴더에 아래의 내용으로 mathdef.lnx 와 PiniMath.lua 파일 둘 다 작성하신 뒤,
사용하시기 전에 [스크립트 실행="예" 파일명="mathdef.lnx" ]
를 실행하면 됩니다.
- 모든 삼각함수는 "도" 를 단위로 사용합니다.
파일 내용
mathdef.lnx
피니엔진 LNX 소스코드
<nowiki> |
#매크로 목록 |
[스크립트 실행="아니오" 파일명="PiniMath.lua" ] |
!라디안{ |
"< p class='title'>라디안< /p>도 단위의 각도를 라디안으로 변환합니다."| |
{1| 수| ""| 0| "라디안 각도로 바꿀 숫자를 입력합니다."} |
} |
!각도{ |
"< p class='title'>각도< /p>라디안 단위의 각도를 도 단위로 변환합니다."| |
{1| 수| ""| 0| "도 각도로 바꿀 숫자를 입력합니다."} |
} |
!사인{ |
"< p class='title'>사인< /p>삼각함수 사인에 대한 값을 반환합니다."| |
{1| 수| ""| 0| "사인 함수의 입력값입니다."} |
} |
!코사인{ |
"< p class='title'>코사인< /p>삼각함수 코사인에 대한 값을 반환합니다."| |
{1| 수| ""| 0| "코사인 함수의 입력값입니다."} |
} |
!아크사인{ |
"< p class='title'>아크사인< /p>삼각함수 아크사인에 대한 값을 반환합니다."| |
{1| 수| ""| 0| "아크사인 함수의 입력값입니다."} |
} |
!아크코사인{ |
"< p class='title'>아크코사인< /p>삼각함수 아크코사인에 대한 값을 반환합니다."| |
{1| 수| ""| 0| "아크코사인 함수의 입력값입니다."} |
} |
!탄젠트{ |
"< p class='title'>탄젠트< /p>삼각함수 탄젠트에 대한 값을 반환합니다."| |
{1| 수| ""| 0| "탄젠트 함수의 입력값입니다."} |
} |
!아크탄젠트{ |
"< p class='title'>아크탄젠트< /p>삼각함수 아크탄젠트에 대한 값을 반환합니다. 수1만 있을 경우 수1에 대한 아크탄젠트를, 수1과 수2가 모두 있을 경우 수1/수2 에 대한 아크탄젠트 값을 반환합니다."| |
{1| 수1| ""| 0| "아크탄젠트 함수의 입력값입니다."}| |
{1| 수2| ""| 0| "아크탄젠트 함수의 입력값입니다."} |
} |
!절대값{ |
"< p class='title'>절대값< /p>절대값에 대한 값을 반환합니다."| |
{1| 수| ""| 0| "절대값을 구할 수 입니다."} |
} |
!자연로그{ |
"< p class='title'>자연로그< /p>자연로그 함수에 대한 값을 반환합니다."| |
{1| 수| ""| 0| "자연로그 함수의 입력값입니다."} |
} |
!상용로그{ |
"< p class='title'>상용로그< /p>상용로그 함수에 대한 값을 반환합니다."| |
{1| 수| ""| 0| "상용로그 함수의 입력값입니다."} |
} |
!초월함수{ |
"< p class='title'>초월함수< /p>초월함수에 대한 값을 반환합니다."| |
{1| 수| ""| 0| "초월함수의 입력값입니다."} |
} |
!제곱승{ |
"< p class='title'>제곱승< /p>밑수를 승수 수 만큼 곱한 값을 반환합니다."| |
{1| 밑| ""| 0| "밑수입니다."}| |
{1| 승수| ""| 0| "승수입니다."} |
} |
!최대값{ |
"< p class='title'>최대값< /p>두 수 중 최대값을 반환합니다."| |
{1| 수1| ""| 0| "최대값을 구할 첫번째 수 입니다."}| |
{1| 수2| ""| 0| "최대값을 구할 두번째 수 입니다."} |
} |
!최소값{ |
"< p class='title'>최소값< /p>두 수 중 최소값을 반환합니다."| |
{1| 수1| ""| 0| "최소값을 구할 첫번째 수 입니다."}| |
{1| 수2| ""| 0| "최소값을 구할 두번째 수 입니다."} |
} |
!제곱근{ |
"< p class='title'>제곱근< /p>입력된 수의 제곱근을 반환합니다."| |
{1| 수| ""| 0| "제곱근을 구할 값입니다."} |
} |
!원주율{ |
"< p class='title'>원주율< /p>원주율을 반환합니다."| |
} |
!자연상수{ |
"< p class='title'>자연상수< /p>자연상수를 반환합니다."| |
} |
#매크로 루아함수 목록 |
@매크로 라디안: |
[[LNX_MATH_RAD]] |
@매크로 각도: |
[[LNX_MATH_DEG]] |
@매크로 사인: |
[[LNX_MATH_SIN]] |
@매크로 코사인: |
[[LNX_MATH_COS]] |
@매크로 아크사인: |
[[LNX_MATH_ASIN]] |
@매크로 아크코사인: |
[[LNX_MATH_ACOS]] |
@매크로 탄젠트: |
[[LNX_MATH_TAN]] |
@매크로 아크탄젠트: |
[[LNX_MATH_ATAN]] |
@매크로 절대값: |
[[LNX_MATH_ABS]] |
@매크로 자연로그: |
[[LNX_MATH_LOG]] |
@매크로 상용로그: |
[[LNX_MATH_LOG10]] |
@매크로 초월함수: |
[[LNX_MATH_EXP]] |
@매크로 제곱승: |
[[LNX_MATH_POW]] |
@매크로 최대값: |
[[LNX_MATH_MAX]] |
@매크로 최소값: |
[[LNX_MATH_MIN]] |
@매크로 제곱근: |
[[LNX_MATH_SQRT]] |
@매크로 원주율: |
[[LNX_MATH_PI]] |
@매크로 자연상수: |
[[LNX_MATH_E]] |
</nowiki> |
PiniMath.lua
피니엔진 LNX 소스코드
--최초 1회만 불리는 코드는 여기다 적어주세요. |
function LNX_MATH_RAD(vm,stck) |
local value = vm:ARGU("라디안","수",0) |
vm:returnValue(math.rad(value)) |
end |
function LNX_MATH_DEG(vm,stck) |
local value = vm:ARGU("각도","수",0) |
vm:returnValue(math.deg(value)) |
end |
function LNX_MATH_SIN(vm,stck) |
local value = vm:ARGU("사인","수",0) |
value = math.rad(value) |
vm:returnValue(math.sin(value)) |
end |
function LNX_MATH_COS(vm,stck) |
local value = vm:ARGU("코사인","수",0) |
value = math.rad(value) |
vm:returnValue(math.cos(value)) |
end |
function LNX_MATH_ASIN(vm,stck) |
local value = vm:ARGU("아크사인","수",0) |
vm:returnValue(math.deg(math.asin(value))) |
end |
function LNX_MATH_ACOS(vm,stck) |
local value = vm:ARGU("아크코사인","수",0) |
vm:returnValue(math.deg(math.acos(value))) |
end |
function LNX_MATH_TAN(vm,stck) |
local value = vm:ARGU("탄젠트","수",0) |
value = math.rad(value) |
vm:returnValue(math.tan(value)) |
end |
function LNX_MATH_ATAN(vm,stck) |
local value1 = vm:ARGU("아크탄젠트","수1",0) |
local value2 = vm:ARGU("아크탄젠트","수2",nil) |
if value2 then |
vm:returnValue(math.deg(math.atan2(value1,value2))) |
else |
vm:returnValue(math.deg(math.atan(value1))) |
end |
end |
function LNX_MATH_ABS(vm,stck) |
local value = vm:ARGU("절대값","수",0) |
vm:returnValue(math.abs(value)) |
end |
function LNX_MATH_LOG(vm,stck) |
local value = vm:ARGU("자연로그","수",0) |
vm:returnValue(math.log(value)) |
end |
function LNX_MATH_LOG10(vm,stck) |
local value = vm:ARGU("상용로그","수",0) |
vm:returnValue(math.log10(value)) |
end |
function LNX_MATH_EXP(vm,stck) |
local value = vm:ARGU("초월함수","수",0) |
vm:returnValue(math.exp(value)) |
end |
function LNX_MATH_POW(vm,stck) |
local base = vm:ARGU("제곱승","밑",0) |
local power = vm:ARGU("제곱승","승수",0) |
vm:returnValue(math.pow(base,power)) |
end |
function LNX_MATH_MAX(vm,stck) |
local value1 = vm:ARGU("최대값","수1",0) |
local value2 = vm:ARGU("최대값","수2",0) |
vm:returnValue(math.max(value1,value2)) |
end |
function LNX_MATH_MIN(vm,stck) |
local value1 = vm:ARGU("최소값","수1",0) |
local value2 = vm:ARGU("최소값","수2",0) |
vm:returnValue(math.min(value1,value2)) |
end |
function LNX_MATH_SQRT(vm,stck) |
local value = vm:ARGU("제곱근","수",0) |
vm:returnValue(math.sqrt(value)) |
end |
function LNX_MATH_PI(vm,stck) |
-- [원주율] 매크로는 인자가 없습니다. |
vm:returnValue(math.pi) |
end |
function LNX_MATH_E(vm,stck) |
-- [자연상수] 매크로는 인자가 없습니다. |
vm:returnValue(math.exp(1)) |
end |
local function m(XVM) |
-- 함수 정의용 루아 파일이므로, |
-- 아무 것도 하지 않습니다. |
end |
return m |
사용 예제
다음은 예제 코드입니다.
피니엔진 LNX 소스코드
[스크립트 실행="예" 파일명="mathdef.lnx" ] |
[로그 텍스트="시작" ] |
[로그 텍스트=[사인 수=0 ]] |
[로그 텍스트=[사인 수=45 ]] |
[로그 텍스트=[사인 수=90 ]] |
[로그 텍스트=[사인 수=135 ]] |
[로그 텍스트=[사인 수=180 ]] |
[로그 텍스트=[사인 수=225 ]] |
[로그 텍스트=[사인 수=270 ]] |
[로그 텍스트=[사인 수=315 ]] |
[로그 텍스트=[사인 수=360 ]] |
[로그 텍스트="끝" ] |
그리고 예제 코드의 실행 결과입니다.
지원 매크로 목록
다음은 이 라이브러리로 지원하는 매크로 목록입니다.
라디안, 각도, 사인, 코사인, 아크사인, 아크코사인, 탄젠트, 아크탄젠트, 절대값, 자연로그, 상용로그, 초월함수, 제곱승, 최대값, 최소값, 제곱근, 원주율, 자연상수