கதிர் ஒளியியல் தொகுதிகளை உருவாக்குவதற்கான பயிற்சி

எந்தவொரு வெளிப்புற வளர்ச்சி சூழலும் தேவை இல்லாமல், தனிப்பயன் தொகுதியை உருவாக்குவதற்கான அடிப்படைகள்மூலம் இந்தப் பயிற்சி உங்களுக்கு வழிகாட்டும்.

கதிர் ஒளியியல் உருவகப்படுத்துதலின் "தொகுதி" நற்பொருத்தம் தனிப்பயன் அளவுருக்கள், தனிப்பயன் கட்டுப்பாட்டு புள்ளிகள் மற்றும் பொருள்களின் வரிசைகள் கொண்ட பொருள்களின் மட்டு சேர்க்கைகளை உருவாக்க அனுமதிக்கிறது. இந்த நற்பொருத்தம் புதிய கருவிகளை உருவாக்க ஏற்கனவே உள்ள கருவிகளால் உருவாக்கப்பட்ட பொருட்களை ஒன்றிணைப்பதன் மூலமும், தனித்துவம் பெறுவதன் மூலமும் அல்லது மறுசீரமைப்பதன் மூலமும் இந்தச் பாவனையாக்கியின் திறனை விரிவுபடுத்துகிறது. எடுத்துக்காட்டாக, CircleSource தொகுதி (கருவிகள் -> பிற -> இறக்குமதி தொகுதி பார்க்கவும்) தற்போதுள்ள" புள்ளி மூல (<360 °) "கருவியால் உருவாக்கப்பட்ட புள்ளி மூலங்களின் வரிசையை ஒருங்கிணைக்கிறது, ஒரு வட்டத்துடன்," வட்ட மூலத்தை "உருவாக்கப் பாவனையாக்கியில் இல்லாத கருவி. FresnelLens தொகுதி" கண்ணாடி-> தனிப்பயன் சமன்பாடு "கருவியைத் தனித்துவம் பெற்றது, இதனால் சமன்பாடு துண்டுகளின் எண்ணிக்கையால் அளவுருவாக்கப்பட்ட ஃப்ரெச்னல் வில்லையின் ஒரு குறிப்பிட்ட வளைவைக் குறிக்கிறது, இதனால் ஒரு சிறப்பு "ஃப்ரெச்னல் வில்லை" கருவியை உருவாக்குகிறது, இதுவும் முன்பு இல்லை. புதிய கருவிகளை உருவாக்குவதோடு மட்டுமல்லாமல், இந்த நற்பொருத்தம் சில ஒளியியல் ஆர்ப்பாட்டங்களை மேலும் ஊடாடும். எடுத்துக்காட்டாக, BeamExpander தொகுதியின் மூன்றாவது கட்டுப்பாட்டு புள்ளியை இழுப்பதன் மூலம், இரண்டு லென்ச்கள் இரண்டு வில்லைகள் அகலத்தின் பொதுவான குவிய புள்ளியின் நிலை எவ்வாறு பாதிக்கிறது என்பதை ஒருவர் நேரடியாகக் காணலாம், இரண்டு வில்லைகளின் குவிய நீளங்களை தனித்தனியாகச் சரிசெய்ய தேவையில்லை.

எல்லா தனிப்பயன் கட்டுப்பாட்டு புள்ளிகளுக்கும் ஒரு தொகுதி தேவையில்லை என்பதை நினைவில் கொள்க. சில எளிய நிகழ்வுகளை "கைப்பிடி" அம்சத்தால் அடைய முடியும் (பாவனையாக்கியின் கீழ் வலது மூலையில் உள்ள உதவி பாப்அப்பில் "குழு, சுழற்சி மற்றும் அளவிலான பொருள்கள்" பகுதியைப் பார்க்கவும்). ஒரு கைப்பிடியை உருவாக்குவதை விட ஒரு தொகுதியை உருவாக்குவது மிகவும் சிக்கலானது என்பதால், ஒரு தொகுதியை உருவாக்குவதைக் கருத்தில் கொள்வதற்கு முன்பு உங்கள் வழக்கை "கைப்பிடி" அம்சத்தால் அடைய முடியுமா என்பதை முதலில் சரிபார்க்க வேண்டும். ஒரு தொகுதியைப் பயன்படுத்தாமல் தனிப்பயன் கட்டுப்பாட்டு புள்ளியின் (இரண்டு பிளாச்டிக் பைகளை நீரிலிருந்து இரண்டு பிளாச்டிக் பைகளை நகர்த்துவது) ஒரு கீழான எடுத்துக்காட்டுக்கு இங்கே ஐப் பார்க்கவும்.

On the other hand, if your case requires complicated programming (such as making animations, using complicated algorithm to place optical elements, or doing analysis on irradiance maps), please instead use the integration tools and write scripts such as in Python or Julia.

Using AI AssistantBeta

The Ray Optics Coder on ChatGPT can help you write Ray Optics modules. It generates the JSON code for the scene containing the module based on your description, and you can then copy the code to the JSON editor (see below). You can also use it to edit existing modules or to modularize scenes.

The code generated by the chatbot may not work directly. If an error occurs, copying and pasting the error message to the chatbot may help. For more complicated modules, you may still want to read the tutorial below and write the code at least partially by yourself.

The instruction and knowledge files for the chatbot are available here. If you prefer another LLM service, you may provide those files to teach it how to write Ray Optics modules.

உள்ளமைக்கப்பட்ட சாதொபொகு ஆசிரியர்

இந்தப் பயன்பாட்டில் தற்போது தொகுதிகள் உருவாக்குவதற்கான காட்சி இடைமுகம் இல்லை, எனவே நீங்கள் காட்சியின் சாதொபொகு ஐ நேரடியாகத் திருத்த வேண்டும்.

பயன்பாட்டின் மேல்-வலது மூலையில் உள்ள "அமைப்புகள்" கீழ்தோன்றலைக் சொடுக்கு செய்வதன் மூலம் உள்ளமைக்கப்பட்ட சாதொபொகு திருத்தியை நீங்கள் இயக்கலாம், பின்னர் "சாதொபொகு திருத்தியை காட்டு" ஐ சரிபார்க்கவும். குறியீடு திருத்திப் பயன்பாட்டின் இடது புறத்தில், தற்போதைய காட்சியின் சாதொபொகு குறியீட்டைக் கொண்டு தோன்ற வேண்டும். கைபேசி சாதனங்களில் இந்த நற்பொருத்தம் சரியாக வேலை செய்யாது என்பதால், உங்களிடம் போதுமான பெரிய திரை இருப்பதை உறுதிப்படுத்திக் கொள்ளுங்கள்.

வழக்கமான காட்சி காண் திருத்திப் பயன்படுத்தி நீங்கள் காட்சியைத் திருத்தும்போது, சாதொபொகு திருத்தியில் உள்ள குறியீடு அதற்கேற்ப புதுப்பிக்கப்படும், மாற்றப்பட்ட பகுதி சிறப்பம்சமாக இருக்கும். மாறாக, சாதொபொகு திருத்தியில் குறியீட்டை நேரடியாகத் திருத்துவது அதற்கேற்ப காட்சியைப் புதுப்பிக்கும். உங்களுக்குச் சாதொபொகு அல்லது எந்த வகையான உரை அடிப்படையிலான தரவு வடிவமும் தெரிந்திருக்கவில்லை என்றால், நீங்கள் அதைச் சிறிது நேரம் விளையாட விரும்பலாம்.

குறிப்பாக, நீங்கள் காட்சியில் ஒரு பொருளைச் சேர்க்கும்போது, அது objs வரிசையில் சேர்க்கப்படுகிறது. அதன் சில பண்புகளை நீங்கள் தாக்கல் செய்யாத மதிப்புக்கு மாற்றினால், அவை அந்தப் பொருளின் திறவுகோல்-மதிப்பு இணைகளாகத் தோன்றும்.

முக்கியமானது: இந்தப் பயிற்சி பக்கத்தில், கீழேயுள்ள இசட்டங்களில் சாதொபொகு குறியீடு திருத்தியை நீங்கள் காணவில்லை என்றால், தயவுசெய்து அதை இயக்கி இந்தப் பக்கத்தை மீண்டும் ஏற்றவும், ஏனெனில் அது எவ்வாறு செயல்படுகிறது என்பதைப் புரிந்துகொள்ளக் குறியீட்டை நீங்கள் காண வேண்டும்.

ஒரு தொகுதியின் அடிப்படைகள்

ஒரு தொகுதியின் எங்கள் முதல் உதாரணத்தைப் பார்க்கட்டும்.

நீங்கள் நான்கு வரிகள் நூல்களைக் காண வேண்டும். சாதொபொகு திருத்தியைப் பார்ப்பதன் மூலம், முதல் இரண்டு நேரடியாக மேல்-நிலை objs வரிசையில் வழக்கம்போல் இருப்பதை நீங்கள் காண்பீர்கள், ஆனால் கடைசி இரண்டு வரிகள் modules.ExampleModule.objs இதில் காண்பீர்கள்.

modules என்பது ஒரு அகராதியாகும், அங்கு முக்கியமானது தொகுதியின் பெயர் (இந்த விசயத்தில்ExampleModule), மற்றும் மதிப்பு அந்தத் தொகுதியின் வரையறை. அந்தத் தொகுதிக்குள் உள்ள (வார்ப்புரு) பொருள்களைக் குறிப்பாக, modules.ExampleModule.objs வரிசை விவரிக்கிறது, இது காட்சியில் உள்ள பொருள்களை விவரிக்கும் உயர்மட்ட objs இலிருந்து வேறுபட்டது.

தொகுதிக்குள் பொருள்களைக் காட்சிக்கு வைக்க, எங்களுக்கு ஒரு "தொகுதி பொருள்" தேவை objs வரிசையில், இதுobjs[2]இந்த எடுத்துக்காட்டில், அதன் வகை Modelobj மற்றும் அதனுடையmodule பண்பு என்பது தொகுதியின் பெயர்.

modules அகராதியில் உள்ள தொகுதி வரையறை காட்சி காண் திருத்தியால் திருத்தப்படவில்லை. எனவே இந்த எடுத்துக்காட்டில் உள்ள கடைசி இரண்டு நூல்களில் ஏதேனும் ஒன்றை நீங்கள் சொடுக்கு செய்யும்போது, நீங்கள் தொகுதி பொருளைத் தேர்ந்தெடுப்பீர்கள், ஆனால் தொகுதியில் உள்ள பொருள்கள் அல்ல. இந்த எடுத்துக்காட்டில் உள்ள தொகுதி வரையறையில் உள்ள நூல்களின் ஒருங்கிணைப்புகள் முழுமையான ஆயத்தொகுப்புகள் என்பதால், கடைசி இரண்டு நூல்கள் இழுக்க முடியாதவை. கட்டுப்பாட்டு புள்ளிகளைப் பயன்படுத்துவதன் மூலம் அவற்றை எவ்வாறு இழுக்க முடியும் என்பதை நாங்கள் கற்றுக்கொள்வோம்.

நீங்கள் ஒரு தொகுதி பொருளைத் தேர்ந்தெடுத்தால், பொருள் பட்டியில் "செயற்காட்சிபடுத்து" பொத்தான் உள்ளது. அதைக் சொடுக்குவதன் மூலம் தொகுதி பொருளை அதன் தொகுதிக்கு "விரிவுபடுத்தும்", மற்றும் objs இப்போது நான்கு நூல்களையும் கொண்டிருக்கும். இந்தச் செயல்பாடு மீளக்கூடியது அல்ல (ஆனால் நிச்சயமாக நீங்கள் "செயல்தவிர்" என்பதைக் சொடுக்கு செய்யலாம்).

தற்போது ஒரு தொகுதியை உருவாக்குவதற்கான பரிந்துரைக்கப்பட்ட வழி, முதலில் சாதொபொகு திருத்தியைப் பயன்படுத்தி ஒரு வெற்று தொகுதியை உருவாக்குவது, காட்சி காண் திருத்தியைப் பயன்படுத்தி சில பொருள்களை உருவாக்கி, பின்னர் objs க்குmodules.ModuleName.objs க்கு பொருள்களை வெட்டி ஒட்டவும் சாதொபொகு திருத்தியைப் பயன்படுத்தலாம்.

அளவுருக்களைச் சேர்ப்பது

தொகுதிக்குள் உள்ள பொருள்களை அளவுருக்களின் தொகுப்பால் வரையறுக்கலாம். ஒரு எளிய உதாரணத்தைப் பார்ப்போம்

இங்கே modules.ModuleName.paramsஎன்பது சரங்களின் வரிசை "name=start:step:end:default"ஆனது மாறிகளின் பெயரையும் வழுக்கிகளின் வரம்பையும் வரையறுக்கும்.தொகுதி பொருள் தேர்ந்தெடுக்கப்படும்போது வழுக்கிகள் பொருள் பட்டியில் தோன்றும்.

modules.ExampleModule.objs வரிசைக்குள், எந்த மதிப்புகளையும் அந்த அளவுருக்களைப் பயன்படுத்தி வெளிப்படுத்தலாம். ஒரு சரத்திற்குள் (TextLabel இன் text பண்பு போன்றவை), மாறிகளின் சமன்பாடுகள் ஒரு இணை பின்னணிகளால் இணைக்கப்பட்டுள்ளன. எண் அளவுருக்களுக்கு (TextLabel இன் fontSize பண்பு போன்றவை), நீங்கள் அதை ஒரு சரமாக மாற்ற வேண்டும், இதனால் நீங்கள் அதில் பின்மேற்கோள் வடிவமைப்பைப் பயன்படுத்தலாம், எனவே ஒவ்வொரு சமன்பாடும் ஒரு இணை பின்மேற்கோள்கள் மற்றும் ஒரு இணை மேற்கோள்களால் சொருகபடுகிறது. சமன்பாடு math.js (தொடரியல்) மூலம் மதிப்பிடப்படுகிறது. சமன்பாடுகளில் நீங்கள் பயன்படுத்தக்கூடிய கிடைக்கக்கூடிய தொடரியல் மற்றும் செயல்பாடுகளை அங்குப் பார்க்கவும்.

அளவுருக்களின் உண்மையான மதிப்புகள் தொகுதி பொருளின் params பண்பில் சேமிக்கப்படுகின்றன, அவை தொகுதி வரையறையைப் போலல்லாமல், வழுக்கியைப் பயன்படுத்தி காட்சி திருத்தியால் நேரடியாகத் திருத்தப்படலாம்.

கட்டுப்பாட்டு புள்ளிகளைச் சேர்க்கிறது

தொகுதி பொருளை இழுக்கக்கூடியதாக மாற்ற, கட்டுப்பாட்டு புள்ளிகளின் தொகுப்பைப் பயன்படுத்தி தொகுதிக்குள் உள்ள பொருட்களை நாம் அளவுருவாக்க வேண்டும். உதாரணத்தைப் பார்ப்போம்

இங்கே modules.ModuleName.numPointsகட்டுப்பாட்டு புள்ளிகளை வரையருக்கிறது. கட்டுப்பாட்டு புள்ளிகளின் ஆயத்தொகுப்புகள் (x_1, y_1), (x_2, y_2) போன்றவை, மேலும் அவை modules.ExampleModule.objs உள் பயன்படுத்தலாம், முந்தைய பிரிவில் குறிப்பிட்டதைப் போல. குறியீட்டு 1 முதல் தொடங்குகிறது என்பதை நினைவில் கொள்க.

கட்டுப்பாட்டு புள்ளிகளின் ஆயங்களின் உண்மையான மதிப்புகள் தொகுதி பொருளின் points பண்பில் சேமிக்கப்படுகின்றன, அவை எடுத்துக்காட்டு 1 இல் உள்ள கடின குறியீட்டு ஆயத்தொலைவுகளைப் போலல்லாமல், கட்டுப்பாட்டு புள்ளிகளை இழுப்பதன் மூலம் காட்சி காண் திருத்தியால் திருத்தப்படலாம், ஒவ்வொன்றும் காட்சியில் இரண்டு செறிவான சாம்பல் வட்டங்களாகக் காட்டப்பட்டுள்ளது. தொகுதி பொருளில் (உரை சிட்டைகளை இழுப்பது போன்றவை) நீங்கள் வேறு எங்கும் இழுத்தால், அனைத்து கட்டுப்பாட்டு புள்ளிகளும் ஒன்றாக நகரும்.

எங்கள் தொகுதி பொருள் இப்போது நகர முடியும் என்பதால், வழக்கமான கருவிகளைப் போலவே பல நிகழ்வுகளையும் உருவாக்குவது இப்போது மிகவும் எளிதானது. தொகுதியின் பெயர் கருவிகள் -> பிற பட்டியலில் காட்டப்பட்டுள்ளது, மேலும் நீங்கள் அதைத் தேர்ந்தெடுத்து, பின்னர் இரண்டு கட்டுப்பாட்டு புள்ளிகளுக்கான வரிசையில் வெற்று இடத்தில் இரண்டு புள்ளிகளைக் சொடுக்கு செய்யலாம். பொருள் பட்டியில் “நகல்” பொத்தானையும் பயன்படுத்தலாம்.

வரிசைகள் மற்றும் நிபந்தனைகள்

வரிசைகள் மற்றும் நிபந்தனைகளைப் பயன்படுத்தி மிகவும் சிக்கலான தொகுதி கட்டப்படலாம். உதாரணத்தைப் பார்ப்போம்

Modules.examplemodule.objs க்குள், ஒரு வரிசையில் உள்ள எந்தவொரு பொருளும் இரண்டு சிறப்பு விசைகளைக் கொண்டிருக்கலாம்: "for" மற்றும் "if". "for" விசைக்கான " இன் மதிப்பு என்பது "name=start:step:end"ஒரு சுழல் மாறியை வரையறுத்தல் அல்லது பல பரிமாண வளையத்தை விவரிக்கும் இந்த வடிவத்தின் பல சரங்களின் வரிசை. வரிசையில் உள்ள அத்தகைய பொருள் சுழல் மாறிகள் படி பல முறை நகலெடுக்கப்படுகிறது."if"` விசையின் மதிப்பு என்பது ஒரு இருமத்தை மதிப்பிடும் ஒரு கணிதத்தைக் குறிக்கும் ஒரு சரம் ஆகும், மேலும் இருமம் உண்மையாக இருந்தால் மட்டுமே அத்தகைய பொருள் வரிசையில் சேர்க்கப்பட்டுள்ளது.

தற்செயலான எல்லையற்ற வளையத்தைத் தடுக்க, "for" சுழலுக்கான மொத்த மறு செய்கையின் எண்ணிக்கையானது தொகுதி வரையறையின்maxLoopLength பண்பின் மூலம் வரையறுக்கப்படுகிறது, அதன் இயல்புநிலை மதிப்பு 1000 ஆகும். தேவைப்பட்டால் இந்தப் பண்பைப் பெரிய மதிப்புக்கு அமைக்கலாம்.

Using variablesBeta

You can define mathematical variables and functions that can be used throughout your module. Let's look at the example

The modules.ModuleName.vars is an array of strings, each representing a math.js statement that defines a variable or function. These definitions are evaluated sequentially, so later definitions can reference earlier ones.

Variable definitions have full access to all parameters and control point coordinates, and once defined, these variables can be used in object templates just like parameters and control point coordinates, allowing for more complex and reusable calculations.

உள்ளமைக்கப்பட்ட தனிப்பயன் சமன்பாடுகளைக் கொண்ட பொருள்கள்

ஏற்கனவே தனிப்பயன் சமன்பாடு உள்ளீடு (கண்ணாடி -> தனிப்பயன் சமன்பாடு போன்றவை) உள்ள பொருள்களுக்கு, சாதொபொகு இல் உள்ள சமன்பாடு சொத்து என்பது கணிதத்தை விட லேடெக்ச் சமன்பாட்டைக் குறிக்கும் ஒரு சரம் ஆகும். சமன்பாட்டில் தனிப்பயன் அளவுருக்களைச் சேர்க்க, லேடெக்ச் சமன்பாடு ஒரு வழக்கமான உரையாக இருந்ததைப் போலவே அதே வார்ப்புரு தொடரியல் பயன்படுத்த வேண்டும். எனவே பின்னிணைப்புகளால் சூழப்பட்ட பகுதி கணிதத்தில் உள்ளது, அதே நேரத்தில் வெளியே பகுதி லேடெக்சில் உள்ளது. தொகுதி அளவுருக்களை math.jsபகுதியில் மட்டுமே அணுக முடியும், மேலும் தனிப்பயன் சமன்பாட்டின் தற்சார்புடைய மாறிகள் (எ.கா. \(x\)) லேடெக்ச் பகுதியில் மட்டுமே அணுக முடியும். சமன்பாடு \(y=\cos(2\pi x+\phi)\) உடன் ஒரு கண்ணாடியை உருவாக்குவதற்கான எடுத்துக்காட்டு இங்கே, அங்கு \(\phi\) ஒரு தொகுதி அளவுரு

எதிர்காலத்தில், சமன்பாடு உள்ளீட்டை ஒன்றிணைக்க ஒரு வழி இருக்கலாம்.

உள்ளமைக்கப்பட்ட வடிவ அளவுரு கொண்ட பொருள்கள்

அதன் வடிவத்தை வரையறுக்க ஏற்கனவே வெவ்வேறு வழிகளை ஆதரிக்கும் பொருள்களுக்கு (தற்போது கண்ணாடி -> கோள வில்லை மட்டுமே). இது போன்ற பொருள்களுக்குச் சிறப்பு சாதொபொகு தொடரியல் உள்ளது, அவை தொகுதி வரையறைக்குள் பயன்படுத்தப்படலாம், அவை எப்போதும் மேல் நிலை objs வரிசையில் வடிவத்தால் வரையறுக்கப்பட்டாலும் கூட. இங்கே ஒரு எடுத்துக்காட்டு