PiniApi:MathExample

피니엔진위키미러
이동: 둘러보기, 검색

수학 라이브러리 예제

개요

코사인, 사인 등의 삼각함수와 상용로그, 제곱근 등의 수학함수 등을 피니엔진에서 사용하게 할 수 있는 수학 라이브러리 예제입니다.

사용 방법은, module 폴더에 아래의 내용으로 mathdef.lnx 와 PiniMath.lua 파일 둘 다 작성하신 뒤, 사용하시기 전에 [스크립트 실행="예" 파일명="mathdef.lnx" ] 를 실행하면 됩니다.

  • 모든 삼각함수는 "도" 를 단위로 사용합니다.

파일 내용

mathdef.lnx

<lnx> #매크로 목록 [스크립트 실행="아니오" 파일명="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]] </lnx>

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>

사용 예제

다음은 예제 코드입니다.

<lnx>[스크립트 실행="예" 파일명="mathdef.lnx" ]

[로그 텍스트="시작" ] [로그 텍스트=[사인 수=0 ]] [로그 텍스트=[사인 수=45 ]] [로그 텍스트=[사인 수=90 ]] [로그 텍스트=[사인 수=135 ]] [로그 텍스트=[사인 수=180 ]] [로그 텍스트=[사인 수=225 ]] [로그 텍스트=[사인 수=270 ]] [로그 텍스트=[사인 수=315 ]] [로그 텍스트=[사인 수=360 ]] [로그 텍스트="끝" ]</lnx>

그리고 예제 코드의 실행 결과입니다.

gLDGXfd.png

지원 매크로 목록

다음은 이 라이브러리로 지원하는 매크로 목록입니다.

라디안, 각도, 사인, 코사인, 아크사인, 아크코사인, 탄젠트, 아크탄젠트, 절대값, 자연로그, 상용로그, 초월함수, 제곱승, 최대값, 최소값, 제곱근, 원주율, 자연상수

참고