PageSourceSearch

https://www.c-plusplus.net/forum/

html c-plusplus.net collected 2026-09-25 14:28:56 UTC 182,343 bytes, 1,319 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en-US" data-dir="ltr" style="direction: ltr;"  >
3<head>
4	<title>Übersicht | C++ Community</title>
5	<meta name="viewport" content="width&#x3D;device-width, initial-scale&#x3D;1.0" />
6	<meta name="content-type" content="text/html; charset=UTF-8" />
7	<meta name="apple-mobile-web-app-capable" content="yes" />
8	<meta name="mobile-web-app-capable" content="yes" />
9	<meta property="og:site_name" content="C++ Community" />
10	<meta name="msapplication-badge" content="frequency=30; polling-uri=https://www.c-plusplus.net/forum/sitemap.xml" />
11	<meta name="keywords" content="C++,Cpp,Forum,C#,C,C++/CLI,MFC,VCL,JavaScript,HTML,CSS,SQL,DB,Database,Qt,Boost,IT,Computer Science,CompSci,Informatik,Community,German,Deutsch,Programmiersprache,Code,Spiele,csharp,.Net,dotNet" />
12	<meta name="msapplication-square150x150logo" content="/forum/assets/uploads/system/site-logo.png" />
13	<meta name="title" content="C++ Community" />
14	<meta property="og:type" content="website" />
15	<meta property="og:title" content="C++ Community" />
16	<meta property="og:url" content="https://www.c-plusplus.net/forum/" />
17	<meta name="description" content="Deutsprachige C++ Community - Irgendwer hat immer eine Antwort" />
18	<meta property="og:description" content="Deutsprachige C++ Community - Irgendwer hat immer eine Antwort" />
19	<meta property="og:image" content="https://www.c-plusplus.net/forum/assets/uploads/system/og-image.png" />
20	<meta property="og:image:width" content="600" />
21	<meta property="og:image:height" content="600" />
22	
23	<link rel="stylesheet" type="text/css" href="/forum/assets/client.css?v=ab1pehoraso" />
24	<link rel="icon" type="image/x-icon" href="/forum/assets/uploads/system/favicon.ico?v=ab1pehoraso" />
25	<link rel="manifest" href="/forum/manifest.json" />
26	<link rel="search" type="application/opensearchdescription+xml" title="C++ Community" href="/forum/osd.xml" />
27	<link rel="apple-touch-icon" href="/forum/assets/uploads/system/touchicon-orig.png" />
28	<link rel="icon" sizes="36x36" href="/forum/assets/uploads/system/touchicon-36.png" />
29	<link rel="icon" sizes="48x48" href="/forum/assets/uploads/system/touchicon-48.png" />
30	<link rel="icon" sizes="72x72" href="/forum/assets/uploads/system/touchicon-72.png" />
31	<link rel="icon" sizes="96x96" href="/forum/assets/uploads/system/touchicon-96.png" />
32	<link rel="icon" sizes="144x144" href="/forum/assets/uploads/system/touchicon-144.png" />
33	<link rel="icon" sizes="192x192" href="/forum/assets/uploads/system/touchicon-192.png" />
34	<link rel="prefetch" href="/forum/assets/src/modules/composer.js?v=ab1pehoraso" />
35	<link rel="prefetch" href="/forum/assets/src/modules/composer/uploads.js?v=ab1pehoraso" />
36	<link rel="prefetch" href="/forum/assets/src/modules/composer/drafts.js?v=ab1pehoraso" />
37	<link rel="prefetch" href="/forum/assets/src/modules/composer/tags.js?v=ab1pehoraso" />
38	<link rel="prefetch" href="/forum/assets/src/modules/composer/categoryList.js?v=ab1pehoraso" />
39	<link rel="prefetch" href="/forum/assets/src/modules/composer/resize.js?v=ab1pehoraso" />
40	<link rel="prefetch" href="/forum/assets/src/modules/composer/autocomplete.js?v=ab1pehoraso" />
41	<link rel="prefetch" href="/forum/assets/templates/composer.tpl?v=ab1pehoraso" />
42	<link rel="prefetch" href="/forum/assets/language/de/topic.json?v=ab1pehoraso" />
43	<link rel="prefetch" href="/forum/assets/language/de/modules.json?v=ab1pehoraso" />
44	<link rel="prefetch" href="/forum/assets/language/de/tags.json?v=ab1pehoraso" />
45	<link rel="prefetch stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700" />
46	<link rel="stylesheet" href="/forum/plugins/nodebb-plugin-emoji/emoji/styles.css?v=ab1pehoraso" />
47	<link rel="prefetch stylesheet" href="/forum/plugins/nodebb-plugin-cppnet-markdown/styles/vs.css" />
48	<link rel="prefetch" href="/forum/assets/src/modules/highlight.js?v=ab1pehoraso" />
49	<link rel="prefetch" href="/forum/assets/language/de/markdown.json?v=ab1pehoraso" />
50	
51
52	
52<script>
53		var RELATIVE_PATH = "/forum";
54		var config = JSON.parse('{"relative_path":"/forum","upload_url":"/assets/uploads","siteTitle":"C++ Community","browserTitle":"C++ Community","titleLayout":"&#123;pageTitle&#125; | &#123;browserTitle&#125;","showSiteTitle":true,"minimumTitleLength":3,"maximumTitleLength":255,"minimumPostLength":2,"maximumPostLength":65536,"minimumTagsPerTopic":0,"maximumTagsPerTopic":5,"minimumTagLength":3,"maximumTagLength":15,"useOutgoingLinksPage":false,"allowGuestHandles":true,"allowFileUploads":false,"allowTopicsThumbnail":false,"usePagination":false,"disableChat":false,"disableChatMessageEditing":false,"maximumChatMessageLength":1000,"socketioTransports":["polling","websocket"],"socketioOrigins":"https://www.c-plusplus.net:*","websocketAddress":"","maxReconnectionAttempts":5,"reconnectionDelay":1500,"topicsPerPage":20,"postsPerPage":20,"maximumFileSize":2048,"theme:id":"nodebb-theme-persona","theme:src":"","defaultLang":"de","userLang":"en-US","loggedIn":false,"uid":-1,"cache-buster":"v=ab1pehoraso","requireEmailConfirmation":true,"topicPostSort":"oldest_to_newest","categoryTopicSort":"newest_to_oldest","csrf_token":false,"searchEnabled":true,"bootswatchSkin":"","enablePostHistory":true,"notificationAlertTimeout":5000,"timeagoCodes":["af","ar","az-short","az","bg","bs","ca","cs","cy","da","de-short","de","dv","el","en-short","en","es-short","es","et","eu","fa-short","fa","fi","fr-short","fr","gl","he","hr","hu","hy","id","is","it-short","it","ja","jv","ko","ky","lt","lv","mk","nl","no","pl","pt-br-short","pt-br","pt-short","pt","ro","rs","ru","rw","si","sk","sl","sr","sv","th","tr-short","tr","uk","uz","vi","zh-CN","zh-TW"],"timeagoCutoff":30,"cookies":{"enabled":false,"message":"[[global:cookies.message]]","dismiss":"[[global:cookies.accept]]","link":"[[global:cookies.learn_more]]"},"acpLang":"en-US","topicSearchEnabled":false,"composer-default":{},"hideSubCategories":false,"hideCategoryLastPost":false,"enableQuickReply":false,"markdown":{"highlight":1,"theme":"vs.css"},"gdpr":{"require":true,"given":false}}');
55		var app = {
56			template: "categories",
57			user: JSON.parse('{"uid":0,"username":"Guest","userslug":"","fullname":"Guest","email":"","icon:text":"?","icon:bgColor":"#aaa","groupTitle":"","status":"offline","reputation":0,"email:confirmed":false,"postcount":0,"topiccount":0,"profileviews":0,"banned":0,"banned:expire":0,"joindate":0,"lastonline":0,"lastposttime":0,"followingCount":0,"followerCount":0,"picture":"","groupTitleArray":[],"joindateISO":"","lastonlineISO":"","banned_until":0,"banned_until_readable":"Not Banned","unreadData":{"":{},"new":{},"watched":{},"unreplied":{}},"isAdmin":false,"isGlobalMod":false,"isMod":false,"privileges":{"chat":false,"upload:post:image":false,"upload:post:file":false,"search:content":false,"search:users":false,"search:tags":false},"offline":true,"isEmailConfirmSent":false}')
58		};
59	</script>
59
60
61	
62	
63</head>
64
65<body class="page-categories page-status-200 skin-noskin">
66	<nav id="menu" class="slideout-menu hidden">
67		<div class="menu-profile">
68	
69</div>
70
71<section class="menu-section" data-section="navigation">
72	<h3 class="menu-section-title">Navigation</h3>
73	<ul class="menu-section-list"></ul>
74</section>
75
76
77	</nav>
78	<nav id="chats-menu" class="slideout-menu hidden">
79		
80	</nav>
81
82	<main id="panel" class="slideout-panel">
83		<nav class="navbar navbar-default navbar-fixed-top header" id="header-menu" component="navbar">
84			<div class="container">
85							<div class="navbar-header">
86				<button type="button" class="navbar-toggle pull-left" id="mobile-menu">
87					<span component="notifications/icon" class="notification-icon fa fa-fw fa-bell-o unread-count" data-content="0"></span>
88					<i class="fa fa-lg fa-fw fa-bars"></i>
89				</button>
90				<button type="button" class="navbar-toggle hidden" id="mobile-chats">
91					<span component="chat/icon" class="notification-icon fa fa-fw fa-comments unread-count" data-content="0"></span>
92					<i class="fa fa-lg fa-comment-o"></i>
93				</button>
94
95				
96				<a href="/forum/">
97					<img alt="cpp-logo" class=" forum-logo" src="/forum/assets/uploads/system/site-logo.png" />
98				</a>
99				
100				
101				<a href="/forum/">
102					<h1 class="navbar-brand forum-title">C++ Community</h1>
103				</a>
104				
105
106				<div component="navbar/title" class="visible-xs hidden">
107					<span></span>
108				</div>
109			</div>
110
111			<div id="nav-dropdown" class="hidden-xs">
112				
113				
114				<ul id="logged-out-menu" class="nav navbar-nav navbar-right">
115					
116					<li>
117						<a href="/forum/register">
118							<i class="fa fa-pencil fa-fw hidden-sm hidden-md hidden-lg"></i>
119							<span>Register</span>
120						</a>
121					</li>
122					
123					<li>
124						<a href="/forum/login">
125							<i class="fa fa-sign-in fa-fw hidden-sm hidden-md hidden-lg"></i>
126							<span>Login</span>
127						</a>
128					</li>
129				</ul>
130				
131				
132				<ul class="nav navbar-nav navbar-right">
133					<li>
134						<form id="search-form" class="navbar-form navbar-right hidden-xs" role="search" method="GET">
135							<button id="search-button" type="button" class="btn btn-link"><i class="fa fa-search fa-fw" title="Search"></i></button>
136							<div class="hidden" id="search-fields">
137								<div class="form-group">
138									<input type="text" class="form-control" placeholder="Search" name="query" value="">
139									<a href="#"><i class="fa fa-gears fa-fw advanced-search-link"></i></a>
140								</div>
141								<button type="submit" class="btn btn-default hide">Search</button>
142							</div>
143						</form>
144					</li>
145					<li class="visible-xs" id="search-menu">
146						<a href="/forum/search">
147							<i class="fa fa-search fa-fw"></i> Search
148						</a>
149					</li>
150				</ul>
151				
152
153				<ul class="nav navbar-nav navbar-right hidden-xs">
154					<li>
155						<a href="#" id="reconnect" class="hide" title="Connection to C++ Community has been lost, attempting to reconnect...">
156							<i class="fa fa-check"></i>
157						</a>
158					</li>
159				</ul>
160
161				<ul class="nav navbar-nav navbar-right pagination-block visible-lg visible-md">
162					<li class="dropdown">
163						<a><i class="fa fa-angle-double-up pointer fa-fw pagetop"></i></a>
164						<a><i class="fa fa-angle-up pointer fa-fw pageup"></i></a>
165
166						<a href="#" class="dropdown-toggle" data-toggle="dropdown">
167							<span class="pagination-text"></span>
168						</a>
169
170						<a><i class="fa fa-angle-down pointer fa-fw pagedown"></i></a>
171						<a><i class="fa fa-angle-double-down pointer fa-fw pagebottom"></i></a>
172
173						<div class="progress-container">
174							<div class="progress-bar"></div>
175						</div>
176
177						<ul class="dropdown-menu" role="menu">
178							<li>
179  								<input type="text" class="form-control" id="indexInput" placeholder="Enter index">
180  							</li>
181						</ul>
182					</li>
183				</ul>
184
185				<ul id="main-nav" class="nav navbar-nav">
186					
187					
188					<li class="">
189						<a class="navigation-link" href="/forum/categories" title="Categories" >
190							
191							<i class="fa fa-fw fa-list" data-content=""></i>
192							
193
194							
195							<span class="visible-xs-inline">Categories</span>
196							
197						</a>
198					</li>
199					
200					
201					
202					<li class="">
203						<a class="navigation-link" href="/forum/recent" title="Recent" >
204							
205							<i class="fa fa-fw fa-clock-o" data-content=""></i>
206							
207
208							
209							<span class="visible-xs-inline">Recent</span>
210							
211						</a>
212					</li>
213					
214					
215					
216					<li class="">
217						<a class="navigation-link" href="/forum/tags" title="Tags" >
218							
219							<i class="fa fa-fw fa-tags" data-content=""></i>
220							
221
222							
223							<span class="visible-xs-inline">Tags</span>
224							
225						</a>
226					</li>
227					
228					
229					
230					<li class="">
231						<a class="navigation-link" href="/forum/popular" title="Popular" >
232							
233							<i class="fa fa-fw fa-fire" data-content=""></i>
234							
235
236							
237							<span class="visible-xs-inline">Popular</span>
238							
239						</a>
240					</li>
241					
242					
243					
244					
245					
246					<li class="">
247						<a class="navigation-link" href="/forum/groups" title="Groups" >
248							
249							<i class="fa fa-fw fa-group" data-content=""></i>
250							
251
252							
253							<span class="visible-xs-inline">Groups</span>
254							
255						</a>
256					</li>
257					
258					
259				</ul>
260
261				
262			</div>
263
264			</div>
265		</nav>
266		<div class="container" id="content">
267			<noscript>
268		<div class="alert alert-danger">
269			<p>
270				Your browser does not seem to support JavaScript. As a result, your viewing experience will be diminished, and you may not be able to execute some actions.
271			</p>
272			<p>
273				Please download a browser that supports JavaScript, or enable it if it's disabled (i.e. NoScript).
274			</p>
275		</div>
276	</noscript>
277
278<div widget-area="header">
279	
280</div>
281<div class="row">
282	<div class="col-lg-12">
283		<h1 class="categories-title">Categories</h1>
284		<ul class="categories" itemscope itemtype="http://www.schema.org/ItemList">
285			
286			<li component="categories/category" data-cid="12" data-numRecentReplies="1" class="row clearfix">
287	<meta itemprop="name" content="Ankündigungen">
288
289	<div class="content col-xs-12 col-md-7 col-sm-9">
290		<div class="icon pull-left" style="background-color: #edbb26; color: #fff;">
291			<i class="fa fa-fw fa-bullhorn"></i>
292		</div>
293
294		<h2 class="title">
295			
296
297<a href="/forum/category/12/ankündigungen" itemprop="url">
298
299Ankündigungen
300</a>
301
302		</h2>
303		<div>
304			
305			
306			<span class="category-children"><span class="category-children-item pull-left"><div class="icon pull-left" style="background-color: #edbb26; color: #fff;"><i class="fa fa-fw hidden"></i></div><a href="/forum/category/59/die-artikel"><small>Die Artikel</small></a></span></span>
307			
308		</div>
309		<span class="visible-xs pull-right">
310			
311			<a class="permalink" href="/forum/post/2623952">
312				<small class="timeago" title="2025-06-08T20:30:54.836Z"></small>
313			</a>
314			
315		</span>
316	</div>
317
318	
319	<div class="col-md-1 hidden-sm hidden-xs stats">
320		<span class="unread human-readable-number" title="102">102</span><br />
321		<small>Topics</small>
322	</div>
323	<div class="col-md-1 hidden-sm hidden-xs stats">
324		<span class="unread human-readable-number" title="1804">1804</span><br />
325		<small>Posts</small>
326	</div>
327	
328	<div class="col-md-3 col-sm-3 teaser hidden-xs" component="topic/teaser">
329		<div class="card" style="border-color: #edbb26">
330	
331	
332	<div component="category/posts">
333		<p>
334			<a href="/forum/user/genxy">
335				
336				<span class="user-icon user-img" title="GenXy" style="background-color: #e91e63;">G</span>
337				
338			</a>
339			<a class="permalink" href="/forum/topic/355319/aktuelle-forumprobleme-2025-06-06/14">
340				<small class="timeago" title="2025-06-08T20:30:54.836Z"></small>
341			</a>
342		</p>
343		<div class="post-content">
344			@Dravere Ok, dann ist die Sache vom Tisch.
345
346		</div>
347	</div>
348	
349	
350
351	
352</div>
353
354	</div>
355	
356	
357</li>
358
359			
360			<li component="categories/category" data-cid="33" data-numRecentReplies="1" class="row clearfix">
361	<meta itemprop="name" content="C++ (alle ISO-Standards)">
362
363	<div class="content col-xs-12 col-md-7 col-sm-9">
364		<div class="icon pull-left" style="background-color: #1e8f5c; color: #f7f7f7;">
365			<i class="fa fa-fw fa-gittip"></i>
366		</div>
367
368		<h2 class="title">
369			
370
371<a href="/forum/category/33/c-alle-iso-standards" itemprop="url">
372
373C++ (alle ISO-Standards)
374</a>
375
376		</h2>
377		<div>
378			
379			<div class="description">
380				<p>Fragen zu Funktionen und Abläufen in C++ (C++98, C++03, C++11, C++14, C++17), um zu erfahren was pure virtual bedeutet, wie das mit Templates, STL und Boost geht. Bitte keine Fragen zu Windows/Linux-Programmierung hier posten!</p>
381
382			</div>
383			
384			
385			<span class="category-children"><span class="category-children-item pull-left"><div class="icon pull-left" style="background-color: #198553; color: #fff;"><i class="fa fa-fw hidden"></i></div><a href="/forum/category/19/mfc"><small>MFC</small></a></span><span class="category-children-item pull-left"><div class="icon pull-left" style="background-color: #659981; color: #fff;"><i class="fa fa-fw hidden"></i></div><a href="/forum/category/21/vcl-c-builder"><small>VCL (C++ Builder)</small></a></span><span class="category-children-item pull-left"><div class="icon pull-left" style="background-color: #26704e; color: #fff;"><i class="fa fa-fw hidden"></i></div><a href="/forum/category/78/c-cli-mit-net"><small>C++&#x2F;CLI mit .NET</small></a></span><span class="category-children-item pull-left"><div class="icon pull-left" style="background-color: #21a366; color: #333;"><i class="fa fa-fw hidden"></i></div><a href="/forum/category/41/andere-guis-qt-gtk-wxwidgets"><small>Andere GUIs - Qt, GTK+, wxWidgets</small></a></span></span>
386			
387		</div>
388		<span class="visible-xs pull-right">
389			
390			<a class="permalink" href="/forum/post/2625246">
391				<small class="timeago" title="2026-09-24T20:00:02.716Z"></small>
392			</a>
393			
394		</span>
395	</div>
396
397	
398	<div class="col-md-1 hidden-sm hidden-xs stats">
399		<span class="unread human-readable-number" title="129333">129333</span><br />
400		<small>Topics</small>
401	</div>
402	<div class="col-md-1 hidden-sm hidden-xs stats">
403		<span class="unread human-readable-number" title="948085">948085</span><br />
404		<small>Posts</small>
405	</div>
406	
407	<div class="col-md-3 col-sm-3 teaser hidden-xs" component="topic/teaser">
408		<div class="card" style="border-color: #1e8f5c">
409	
410	
411	<div component="category/posts">
412		<p>
413			<a href="/forum/user/kahnsoft">
414				
415				<span class="user-icon user-img" title="KahnSoft" style="background-color: #f44336;">K</span>
416				
417			</a>
418			<a class="permalink" href="/forum/topic/355496/rail-road-tycoon-mfc-in-action/6">
419				<small class="timeago" title="2026-09-24T20:00:02.716Z"></small>
420			</a>
421		</p>
422		<div class="post-content">
423			@Finnegan sagte in Rail Road Tycoon MFC in Action:
424
425way E
426
427Hey Finnegan,
428Das Projekt ist auch auf GitHub, https://github.com/KahnSoft/FlexxRail
429Hab da nicht ganz die Muße, mir den Code anzusehen
430Ja ist auch nur ein Fetzen, zeigt aber den Vorgang der Chunk -Generierung ohne Cracks untereinander, da spielt ein gewisses Micro Overlapping eine rolle, das am ende aber kein Brot frisst (+2 auf den sizes der Chunks) Es wird sonnst Abstrus Rechen lastig wenn man da keine Tricks anwendet, also alles ist immer ein Kompromiss zwischen best of und Perform. Wenn man da Hunderte Loks mit Anhängern anzeigt, braucht man jeden Rechenquant, solange kein Gameplay statt findet, muss ich immer 1Khz Framerate erreichen, sonnst ist es später vorbei, also minimalste Operationen mit bestmöglichen Ergebnis.
431die Berglandschaft in dem Video ist nicht unbedingt eine Heightmap-Geometrie sondern ein eventuell generischeres 3D-Modell
432Genau es ist keine Highmap es ist alles dynamisch mit der Perlin Noise erzeugtes Grid- dessen Höhenwerte vom Shader mit Texpixeln im shader Texturmischer belegt werden,  ich erzeuge damit riesige Karten mit Kantenlängen von bis zu 1 Million Dreiecke Seitenlänge was riesig ist, die Loks fahren mit rund 145Kmh alles bereist authentisch proportional, und ich kann die Kamera auf eine Fahrende Lok aufschalten und diese verfolgen, die benötigt in diesem Affentempo rund 5 Minuten um eine Seitenlänge zu passieren. Eine Highmap dieser Größe sprengt den Speicherrahmen , es ist auch nicht gerade günstig eine Textur zu haben die 10000 Pixel Breit und Hoch ist. Man nennt das mit vielen Highmaps dann Content-Streaming DirectX SDK macht das vor, aber ich muss wie gesagt insgesamt die Performance erhalten ,  es können später tausende Objekte mit den Chunks und dem LodSystem so veraltet werden. Da bin ich auch froh drüber es ohne ContentStreaming und Ohne HighMaps gemacht zu haben, zumal nach der Highmap dann nochmal selbige ColorMap als Textur benötigt wird, alles wird also Dynamisch zur Laufzeit erzeugt, die Qualität ist natürlich nicht die einer ColorMap, aber sie ist apokalyptisch groß, es wird also keine 3D -Lok Simulation wo jedes Gauge im Kesselhaus zu sehen ist, das zerbricht die Welt der unendlichen Weiten , das wird der große Vorteil gegenüber statischer Körperwelten. Also Aktienhandel Resourcenabbau alles Basiert auf Primitives, in einer erschlagenden Dimension.
433Nur die Ränder der &quot;Szene&quot;,
434Genau keine Cracks in der Szene (NoGo) lediglich die Ränder haben eine Treppensignatur, aber die könnte ich wegrechnen ist aber unnötig out of SkyBox
435Parametrischen Kurven (Splines) meist eine Variable &quot;Geschwindigkeit&quot; haben.
436Da die Lok die Spline kennt (also die errechnet die selbst , es existieren real nur Kontrollpunkte) erzeugt sie für die Kurvigkeit eine Speed-Drossel die wirkt für Aufstieg bremsend für Abstieg Beschleunigend und für rechts links Radien Bremsend.
437void CSplineObjFollow::CalcSpeed()
438{
439  const int dirSz = (int)m_DirN.size();
440  if (m_SplineIdx &lt; 0 || m_SplineIdx &gt;= dirSz)
441  {
442    m_ConsecUphill = 0;
443    m_ConsecDownhill = 0;
444    m_ConsecCurve = 0;
445    m_UphillFlt *= 0.9f;
446    m_DownhillFlt *= 0.9f;
447    m_CurveFlt *= 0.9f;
448    m_LastSpeedFactor = 1.0f;
449    return;
450  }
451
452  // Calculate Slope directly
453  const float s = m_DirN[m_SplineIdx].z;
454
455  // Calculate Curvature directly
456  float avgCurv = 0.0f;
457  int curvSamples = 0;
458  const int splineSz = (int)m_Spline.size();
459
460  if (splineSz &gt;= 3)
461  {
462      const int maxCenter = splineSz - 2;
463      CVertex* splinePtr = m_Spline.data();
464      int si, center;
465      float c;
466
467      for (si = 0; si &lt; 3; ++si)
468      {
469          center = m_SplineIdx + si;
470          if (center &lt; 1) center = 1;
471          else if (center &gt; maxCenter) center = maxCenter;
472
473          c = Spline::LocalCurvature(splinePtr[center - 1], splinePtr[center], splinePtr[center + 1]);
474          if (c &gt; 0.0f) { avgCurv += c; ++curvSamples; }
475      }
476
477      if (curvSamples) avgCurv /= (float)curvSamples;
478  }
479
480  const float absS = fabsf(s);
481  float factor = 1.0f;
482
483  if (absS &gt; SFF_EFFECT_THR)
484  {
485    float eff = absS - SFF_EFFECT_THR;
486    if (s &gt; 0.0f)                                                          // Bergauf: langsamer
487    {
488      if (eff &gt; SFF_MAX_UP_EFF) eff = SFF_MAX_UP_EFF;
489      factor -= eff * m_UphillFlt;
490    }
491    else                                                                   // Bergab: schneller
492    {
493      if (eff &gt; 0.10f) eff = 0.10f;
494      factor += eff * m_DownhillFlt;
495    }
496  }
497
498  if (avgCurv &gt; 1e-5f) ++m_ConsecCurve; else if (m_ConsecCurve &gt; 0) --m_ConsecCurve;
499
500  const float invUp = 1.0f / (float)SFF_CONSEC_FULL_UP;
501  const float uphillTarget = (m_ConsecUphill &gt; 0) ? (m_ConsecUphill * invUp) : 0.0f;
502  const float downhillTarget = (m_ConsecDownhill &gt; 0) ? (m_ConsecDownhill * invUp) : 0.0f;
503  const float curveTarget = (avgCurv &gt; 0.0f) ? (avgCurv / (avgCurv + 0.003f) * 1.5f) : 0.0f;
504
505  m_UphillFlt += (uphillTarget - m_UphillFlt) * ((uphillTarget &gt; m_UphillFlt) ? SFF_RISE : SFF_DECAY);
506  m_CurveFlt += (curveTarget - m_CurveFlt) * ((curveTarget &gt; m_CurveFlt) ? SFF_RISE : SFF_DECAY);
507  m_DownhillFlt += (downhillTarget - m_DownhillFlt) * ((downhillTarget &gt; m_DownhillFlt) ? SFF_RISE : SFF_DECAY);
508
509  if (m_CurveFlt &gt; 0.0f)                                                   // Kurven: langsamer
510  {
511    float tmp = 1.0f - SFF_CURVE_MAX_RED * (m_CurveFlt * (1.0f + 0.65f * m_CurveFlt) * (1.0f + 0.75f * m_
511CurveFlt));
512    if (tmp &lt; 0.1f) tmp = 0.1f;
513    factor *= tmp;
514  }
515
516  if (factor &lt; 0.25f) factor = 0.25f;
517  else if (factor &gt; 1.5f) factor = 1.5f;
518
519  const float smooth = (factor &lt; m_LastSpeedFactor) ? SFF_SPEED_SMOOTH_DOWN : (SFF_SPEED_SMOOTH_UP / (1.0f + m_Speed * SFF_SPD_SMOOTH_SCL));
520  m_LastSpeedFactor += (factor - m_LastSpeedFactor) * smooth;
521}
522
523void CSplineObjFollow::CalcSpeedA()
524{
525  float factor = 1.0f;
526  const int dirSz = (int)m_DirN.size();
527
528  if (dirSz &gt;= 2 &amp;&amp; m_SplineIdx &gt;= 0)
529  {
530    float maxProxy = 0.0f;
531    const CVertex *dirPtr = m_DirN.data();
532
533    for (int i = 0; i &lt; 3; ++i)
534    {
535      int pidx = m_SplineIdx + i;
536      if (pidx &lt; 1) pidx = 1;
537      else if (pidx &gt;= dirSz) pidx = dirSz - 1;
538
539      int p0 = (pidx &gt; 0) ? pidx - 1 : 0;
540      float d = dirPtr[p0].Dot(dirPtr[pidx]);
541      if (d &gt; 1.0f) d = 1.0f;
542      else if (d &lt; -1.0f) d = -1.0f;
543
544      float proxy = 1.0f - d;
545      if (proxy &gt; maxProxy) maxProxy = proxy;
546    }
547
548    const float curveEffect = (maxProxy &gt; 0.0f) ? (maxProxy / (maxProxy + 0.001f)) : 0.0f;
549    m_CurveFlt += (curveEffect - m_CurveFlt) * ((curveEffect &gt; m_CurveFlt) ? SFF_RISE : SFF_DECAY);
550    factor = 1.0f - SFF_CURVE_MAX_RED * (curveEffect * (1.0f + 0.75f * m_
550CurveFlt));
551  }
552
553  if (factor &lt; 0.15f) factor = 0.15f;
554  else if (factor &gt; 1.5f) factor = 1.5f;
555
556  float alpha = 0.20f + 0.55f * (1.0f - factor);
557  if (alpha &gt; 1.0f) alpha = 1.0f;
558  if (factor &lt; m_LastSpeedFactor) alpha = alpha * 0.9f + 0.5f * (1.0f - alpha);
559
560  m_LastSpeedFactor += (factor - m_LastSpeedFactor) * alpha;
561}
562
563Diese Verfolgung von Tracks wird also in separaten Threads berechnet, und für jede Lok durchlaufen, da gibt es nicht die geringsten Probleme mit der Render Geschwindigkeit , es wird also kein Normal benötigt um die Geschwindigkeit auf den Dynamischen Tracks zu erhalten, die allerdings über normal vektoren verfügen, jedoch nie von der Mechanik abgefragt werden, die Tracks haben auch eine Beschreibung über den sog. TrackFragmentGenerator:
564/*
565==========================================================
566TrackFragment Eigenschaften &amp; Geometrie-Regelwerk
567==========================================================
568
5691) Grundstruktur (RNA1):
570   - Ein TrackFragment besteht aus mehreren Einzelteilen: Balast, Slicer (Schienen), Sleeper (Schwellen).
571   - Die Geometrie wird entlang einer Eingangsspline (VertexLst) erzeugt und verteilt.
572   - Jeder Einzelteiltyp hat eigene Parameter und Farben.
573
5742) Balast (RNA1):
575   - Wird als U-Profil ohne Boden generiert.
576   - Besteht aus Seitenwänden und Dach, keine Unterseite.
577   - Die Breite und Höhe sind abhängig vom Maßstab (scale).
578   - Die Balast-Spline wird mit niedriger Dichte (Subsampling) erzeugt.
579   - Speicherbedarf steigt mit Dichte und Länge der Spline.
580
5813) Slicer (Schienen) (RNA1):
582   - Werden als U-Profile ohne Boden generiert.
583   - Bestehen aus Seitenwänden und Dach, keine Unterseite.
584   - Slicer sind schmaler und höher als der Balast.
585   - Es werden zwei Slicer erzeugt: linke und rechte Schiene, jeweils entlang der Spline versetzt.
586   - Slicer erhalten eine eigene Farbe für Seiten und Dach.
587   - Subsampling reduziert Speicher und Rechenlast.
588
5894) Sleeper (Schwellen) (RNA1):
590   - Werden als Quader erzeugt, keine U-Profile.
591   - Liegen quer zur Spline und verbinden die beiden Slicer.
592   - Die Platzierung erfolgt gleichmäßig entlang der Spline, am Anfang, Ende und dazwischen.
593   - Sleeper erhalten eigene Farben für Seiten und Oberseite.
594   - Anzahl und Abstand beeinflussen die Komplexität.
595
5965) Geometrie-Erzeugung (RNA1):
597   - Die Methode GenerateVbo erzeugt die Einzelteile entlang der Spline.
598   - Für Balast und Slicer wird die Spline mit unterschiedlichen Schrittweiten abgetastet (Subsampling).
599   - Die Geometrie wird als Vertex-, Normal-, Color- und Index-Arrays für das VBO erzeugt.
600   - Datenfluss: Spline -&gt; Sampling -&gt; Einzelteil -&gt; VBO.
601
6026) Farben und Materialien (RNA1):
603   - Jede Komponente (Balast, Slicer, Sleeper) erhält eigene Farben für Seiten und Dach/Oberseite.
604   - Die Farben werden beim Erzeugen der Vertices zugewiesen.
605   - Farbwechsel im Code beachten.
606
6077) VBO-Handling (RNA1):
608   - Die erzeugten Geometrien werden in einem VBOSet gespeichert.
609   - Nach der Erzeugung wird das VBO für die Darstellung vorbereitet.
610   - Speicherbedarf und Performance hängen von der Anzahl der Vertices und Indices ab.
611
6128) Besonderheiten (RNA1):
613   - Die Geometrie ist so ausgelegt, dass keine Bodenflächen für U-Profile entstehen.
614   - Die Verteilung und Ausrichtung der Einzelteile erfolgt dynamisch entlang der Eingangsspline.
615   - Fehlerquellen: Indizierung, Subsampling, falsche Parameter.
616
6179) Komplexitätsfaktoren (KI-relevant):
618   - Anzahl und Dichte der Einzelteile (Balast, Slicer, Sleeper).
619   - Länge und Form der Eingangsspline.
620   - Subsampling-Parameter und Profilgrößen.
621   - VBO-Speicherbedarf und Render-Performance.
622   - Korrekte Indizierung und Farbzuteilung.
623   - Robustheit gegen fehlerhafte Eingabedaten.
624
62510) Speicherverwaltung und Vektorzugriffe (RNA1):
626   - Alle Geometrie-Daten werden in std::vector gespeichert.
627   - Jeder push/remove/clear/erase-Aufruf ruft automatisch die Destruktoren der enthaltenen Objekte auf.
628   - Dadurch werden Ressourcen immer korrekt freigegeben.
629   - Speicherlecks sind ausgeschlossen, solange keine rohen Zeiger verwendet werden.
630
63111) LOD-Rendering für entfernte Fragmente (RNA1):
632   - Ab einer Entfernung von TRACK_LOD_DIST werden weniger Indices im VBO gezeichnet.
633   - Ein visueller Hinweis (z.B. &quot;LOD aktiv&quot;) wird rechtsbündig am Fragment angezeigt.
634   - Die LOD-Distanz ist als TRACK_LOD_DIST im Code definiert.
635   
636   LOD-Priorität (VBO-Reihenfolge, Index 0 = höchste Priorität):
637   +-------+------------------+---------------+---------------------------+
638   | Phase | Komponente       | LOD-Priorität | Beschreibung              |
639   +-------+------------------+---------------+---------------------------+
640   |   1   | Gauges           | Höchste       | Lichttafel (4 Lichter)    |
641   |   1   | Dipper           | Höchste       | Signalflügel              |
642   |   2   | Switch-Cube      | Hoch          | Weichen-Hitbox            |
643   |   3   | Terminal         | Hoch          | Bahnsteig-Geometrie       |
644   |   4   | Signal-Mast      | Mittel        | Stange + Sockel           |
645   |   5   | Prellbock        | Mittel        | Buffer Stop               |
646   |   6   | Ballast          | Niedrig       | Schotter (viele Faces)    |
647   |   6   | Slicer           | Niedrig       | Schienen (viele Faces)    |
648   |   6   | Sleeper          | Niedrig       | Schwellen (viele Faces)   |
649   +-------+------------------+---------------+---------------------------+
650   
651   Bei LOD-Reduktion werden zuerst Sleeper/Slicer/Ballast weggelassen,
652   Gauges und Dipper bleiben bis zuletzt sichtbar.
653
65412) Switch-Cube für Weichen (RNA2):
655   - Wird nur bei TYPE_SWITCH_TRK erzeugt.
656   - Besteht aus einem Würfel (Cube) und einem Sockel (Pyramiden-Stumpf) neben dem Gleis am Ende der Spline.
657   - Position: Neben dem Balast in Fahrtrichtung, versetzt um die halbe Balast-Breite plus zusätzlichen Abstand.
658   - Größe: Würfel hat scale * 1.6f Größe, Sockel ist doppelt so breit.
659   - Farben: Würfel in Slicer-Farben (Grün=Open, Rot=Closed), Sockel in Balast-Farben.
660   - Zweck: Visuelle Darstellung von Weichen-Switches mit Statusanzeige (Ope
660n/Closed).
661   - Bounding Box: Separate m_SwitchBBoxMin/Max für Kollision oder Selektion.
662
66313) Signal-Mast für Weichen &amp; Strecken (RNA3):
664   - Wird bei TYPE_SWITCH_TRK (automatisch) oder via SnapIn (manuell) erzeugt.
665   - Besteht aus mehreren Komponenten:
666     a) Sockel: Pyramiden-Stumpf auf Terrain-Höhe
667     b) Mast: Zwei vertikale Streben (Leiter-Stil) mit Sprossen
668     c) Kopfstück: Horizontaler Balken am oberen Ende
669     d) Ausleger: Horizontale Stäbe zur Seitenstabilisierung
670     e) Dipper: Beweglicher Signal-Flügel (Formsignal)
671     f) Gauge: Lichttafel mit 4 Signallichtern (Hp0/Hp1/Hp2)
672   - Position:
673     * Weichen: Automatisch in der Mitte der Spline.
674     * Strecken: An definierter SnapIn-Position (dotIdx).
675   - Dipper-Zustände:
676     * TYPE_SIGNAL_OPEN gesetzt: Dipper horizontal (Hp0 = Halt)
677     * TYPE_SIGNAL_OPEN nicht gesetzt: Dipper nach unten (Hp1 = Fahrt frei)
678   - Farben: Mast in Balast-Farben, Dipper rot mit weißer Füllung und Ring.
679   - Bounding Box: Separate m_SignalBoxes für Klick-Erkennung (umschließt gesamten Mast).
680   - Debug-Anzeige: Weiße Box, roter Text &quot;Hp0&quot;/&quot;Hp1&quot;.
681   - Lok-Steuerung: Signal-Status wird in SnapIn.flags gespeichert.
682
68314) Prellbock / Buffer Stop (RNA4):
684   - Wird automatisch bei TYPE_PILLER_TRK erzeugt (Track mit offenem Ende).
685   - Erkennung: forwardFragmentId == -1 ODER backwardFragmentId == -1.
686   - Position: Am Gleisende, versetzt um 3 * SLEEPER_PITCH nach hinten.
687   - Struktur:
688     a) Gleis-Extension: Echtes Gleis (Balast/Slicer/Sleeper) vom Ende bis zum Prellbock.
689     b) Schraege Stuetzen: 2x 45-Grad Hypotenuse (links/rechts auf Schienen).
690     c) Vertikale Kateten: 2x senkrechte Pfosten hinter den Stuetzen.
691     d) Querbalken oben: Horizontaler Balken zwischen den Kateten-Spitzen.
692     e) Querbalken unten: Horizontaler Balken am Fuss der Stuetzen.
693   - Doppelgleis: 2 separate Prellboecke mit Gleisabstand versetzt.
694   - Verkehrsvertrag: Am Prellbock dreht nur die Fahrtrichtung der Lok. Ihre
695     m_TrackSide bleibt unveraendert; der seitliche Render-Offset wird gespiegelt.
696     Bei einem Doppelgleis-Hostwechsel wird zusaetzlich die Weltposition fuer
697     die Seitenkontinuitaet ausgewertet, damit Weichen keinen Spurwechsel erzeugen.
698   - Farben: Stuetzen grau, Querbalken in Sleeper-Farben.
699   - Rekursionsschutz: TYPE_PILLER_TRK wird fuer Extension-Spline entfernt.
700
70115) Terminal / Bahnsteig (RNA5):
702   - Länge basiert auf Zuglänge: TERMINAL_WAGON_LEN × TERMINAL_MAX_WAGONS = 15000 units
703   - 1 Waggon/Lok = 1500 units, Max 10 Waggons am Bahnsteig
704   - Z-Ebene: Einheitliche Höhe (Mittelwert aller Dots) - keine Wellen!
705   - Zwei Signale (A + B) an den Enden für Face-to-Face Steuerung.
706   - Dynamische Verkürzung wenn Track zu kurz ist.
707
70816) Verkehr &amp; Fahrplaner (RNA6):
709   - Die Basis-Verkehrslogik ist aktiv: physische Doppelgleis-Seiten,
710     Bremsen und Disaster-Erkennung laufen in GLSceneTraffic.
711   - Ein globaler Fahrplaner/Scheduler über dieser Basis bleibt geplant.
712   - Er nutzt RNA1-5 (Gleise, Weichen, Signale, Prellboecke, Terminals)
713     fuer Zeitsteuerung und Automatisierung von Weichen/Signalen.
714*/
715
716
717nicht in jedem Frame machen. Die Geometrie der Lok und Waggons bedingt ja einen minimalen Krümmungsradius.
718Tatsächlich wird es sogar öfters berechnet als pro jedem Frame, das geht mit bis zu 20 tausend Iterationen also 20Khz
719in den Threads, die Loks fahren seidig und extrem Pixel genau auf den Gleiskörpern.
720Durch die Translationen für die Lok -Mesh Körper werden diese exact an der Spline geführt dazu wird für die Loks eine Pivot-Translation verwendet:
721void CGLmatrix::TranslatePivotXYZTrack(const CVertex&amp; world, CVertex&amp; pivot, const CVertex&amp; forward, const CVertex&amp; right, const CVertex&amp; up)
722{
723	float* m = m_m0;
724
725	// Snapshot original orientation (R0) and translation (t0)
726	const float r0x = m[0],  r0y = m[1],  r0z = m[2];
727	const float r1x = m[4],  r1y = m[5],  r1z = m[6];
728	const float r2x = m[8],  r2y = m[9],  r2z = m[10];
729	float       tx  = m[12], ty  = m[13], tz  = m[14];
730
731	// Phase 1: t1 = t0 + R0 * (world + pivot)
732	const float v0x = world.x + pivot.x;
733	const float v0y = world.y + pivot.y;
734	const float v0z = world.z + pivot.z;
735	tx += r0x * v0x + r1x * v0y + r2x * v0z;
736	ty += r0y * v0x + r1y * v0y + r2y * v0z;
737	tz += r0z * v0x + r1z * v0y + r2z * v0z;
738
739	// Phase 2: DIREKTE Matrix-Orientierung aus Spline-Basis (statt Euler-Rotation)
740	// R' = R0 * SplineBasis (Forward, Right, Up direkt verwenden)
741	m[0] = r0x * forward.x + r1x * forward.y + r2x * forward.z;
742	m[1] = r0y * forward.x + r1y * forward.y + r2y * forward.z;
743	m[2] = r0z * forward.x + r1z * forward.y + r2z * forward.z;
744	
745	m[4] = r0x * right.x + r1x * right.y + r2x * right.z;
746	m[5] = r0y * right.x + r1y * right.y + r2y * right.z;
747	m[6] = r0z * right.x + r1z * right.y + r2z * right.z;
748	
749	m[8] = r0x * up.x + r1x * up.y + r2x * up.z;
750	m[9] = r0y * up.x + r1y * up.y + r2y * up.z;
751	m[10] = r0z * up.x + r1z * up.y + r2z * up.z;
752
753	// Phase 3: t' = t1 + R' * (-pivot)
754	tx += m[0] * (-pivot.x) + m[4] * (-pivot.y) + m[8]  * (-pivot.z);
755	ty += m[1] * (-pivot.x) + m[5] * (-pivot.y) + m[9]  * (-pivot.z);
756	tz += m[2] * (-pivot.x) + m[6] * (-pivot.y) + m[10] * (-pivot.z);
757	m[12] = tx; m[13] = ty; m[14] = tz; // keep m[15] as is
758}
759
760
761Und für normale nicht dem Track folgender Objekte eine Pivot normale Translation (Beides Teil der GL Engine wo jede Matrix wenn sie fertig im Speicher liegt nur einmal per Frame an GL gesendet wird was zu wahnsinnigen Ablaufraten führt:
762void CGLmatrix::TranslatePivotXYZ(const CVertex&amp; world,  CVertex&amp; pivot, const CVertex&amp; rot)
763{
764	float* m = m_m0;
765
766	// Snapshot original orientation (R0) and translation (t0)
767	const float r0x = m[0],  r0y = m[1],  r0z = m[2];
768	const float r1x = m[4],  r1y = m[5],  r1z = m[6];
769	const float r2x = m[8],  r2y = m[9],  r2z = m[10];
770	float       tx  = m[12], ty  = m[13], tz  = m[14];
771
772	// Phase 1: t1 = t0 + R0 * (world + pivot)
773	const float v0x = world.x + pivot.x;
774	const float v0y = world.y + pivot.y;
775	const float v0z = world.z + pivot.z;
776	tx += r0x * v0x + r1x * v0y + r2x * v0z;
777	ty += r0y * v0x + r1y * v0y + r2y * v0z;
778	tz += r0z * v0x + r1z * v0y + r2z * v0z;
779
780	// Phase 2: R' = R0 * R(rot) – RotXYZ(rot) on the basis columns
781	const float cX = CCalculate::LutCos(rot.x); const float sX = CCalculate::LutSin(rot.x);
782	const float cY = CCalculate::LutCos(rot.y); const float sY = CCalculate::LutSin(rot.y);
783	const float cZ = CCalculate::LutCos(rot.z); const float sZ = CCalculate::LutSin(rot.z);
784
785	// Start from current m (R0) and apply X, then Y, then Z exactly like RotXYZ
786	float x0, y0, z0, x1, y1, z1, x2, y2, z2;
787	// X-axis
788	x0 =  m[0];  y0 =  m[1];  z0 =  m[2];
789	x1 =  m[4] * cX + m[8] * sX;   y1 =  m[5] * cX + m[9] * sX;   z1 =  m[6] * cX + m[10] * sX;
790	x2 =  m[4] * -sX + m[8] * cX;  y2 =  m[5] * -sX + m[9] * cX;  z2 =  m[6] * -sX + m[10] * cX;
791
792	m[0] = x0; m[1] = y0; m[2] = z0;
793	m[4] = x1; m[5] = y1; m[6] = z1;
794	m[8] = x2; m[9] = y2; m[10] = z2;
795
796	// Y-axis
797	x0 =  m[0] * cY + m[8] * -sY;  y0 =  m[1] * cY + m[9] * -sY;  z0 =  m[2] * cY + m[10] * -sY;
798	x1 =  m[4];                    y1 =  m[5];                     z1 =  m[6];
799	x2 =  m[0] * sY + m[8] * cY;   y2 =  m[1] * sY + m[9] * cY;   z2 =  m[2] * sY + m[10] * cY;
800
801	m[0] = x0; m[1] = y0; m[2] = z0;
802	m[4] = x1; m[5] = y1; m[6] = z1;
803	m[8] = x2; m[9] = y2; m[10] = z2;
804
805	// Z-axis
806	x0 =  m[0] * cZ + m[4] * sZ;   y0 =  m[1] * cZ + m[5] * sZ;   z0 =  m[2] * cZ + m[6] * sZ;
807	x1 =  m[0] * -sZ + m[4] * cZ;  y1 =  m[1] * -sZ + m[5] * cZ;  z1 =  m[2] * -sZ + m[6] * cZ;
808	x2 =  m[8];                    y2 =  m[9];                     z2 =  m[10];
809
810	m[0] = x0; m[1] = y0; m[2] = z0;
811	m[4] = x1; m[5] = y1; m[6] = z1;
812	m[8] = x2; m[9] = y2; m[10] = z2;
813
814	// Phase 3: t' = t1 + R' * (-pivot)
815	tx += m[0] * (-pivot.x) + m[4] * (-pivot.y) + m[8]  * (-pivot.z);
816	ty += m[1] * (-pivot.x) + m[5] * (-pivot.y) + m[9]  * (-pivot.z);
817	tz += m[2] * (-pivot.x) + m[6] * (-pivot.y) + m[10] * (-pivot.z);
818	m[12] = tx; m[13] = ty; m[14] = tz; // keep m[15] as is
819}
820
821einfacher sein könnte, dem User das Feintuning zu überlassen
822Der braucht ein klares Spielerlebnis , das da beim gleise Legen irgendwelche Kapriolen passieren soll der nicht handhaben,
823es spielen ja auch viele Kinder oder bei großen Gleisanlagen währ es zu frikelig, der Editor unterstellt dem User ganz klare Edit Regeln die unbedingt von der Software sichergestellt werden müssen so wie bei einem CAD Programm.
82450 Spieler &quot;MMO&quot; ist schon nen hartes Ziel.
825Auf jeden Fall, die können sogar Server mieten und ihr eigenes Terrain (Ressourcen) über Tunnels an das Maingrid anschließen, das läuft dann aber über Linux auf Mietservern, das Thema alleine sprengt schnell den Rahmen da muss man aufpassen, es beginnt in kürze mit der Fahrplan Erstellung und dem Zug-Roster der die Wagongs koppelt(folge Jahr) . Sicher kommen dort Hacker und Einkreiser usw. muss man sehen das sich das selber verwaltet. UDP SSL Kodierter Transfer mal sehen das ist noch ein Weilchen hin. Aber die Kommunikation ist im Prinzip klar, läuft dann zuerst auf ner VM am Nebentisch...
826Viel Erfolg damit! Ich glaub da gibts auch sicher einige Foren und Communities für derartige Spiele.
827Na erstmal noch nicht , in dem Zustand interessiert das nur Experten, es gibt ja noch kein Game, in Foren habe ich bis heute noch keinen gehört dem das gefällt  Da bist Du der erste mit dem ich drüber Chatten kann 
828Das OpenTTD ist eine andere Liga, da will ich nicht hin, ich mache ein ganz spezielles Railroad wo der User Signale weichen Bahnhöfe auch über Lua -Skript kontrollieren kann, also Stichwort alles ist volldynamisch und generisch.
829Ego-Perspektive (Lokführer)
830Genau ich habe einen Gleistracker der mit der Kamera alle bestehnden Gleise abfährt (Neben der Zugverfolgung) Das jetzt schon ein Wahnsinns ScreenBlanker !
831Danke für deine Aufmerksamkeit
832Ich berichte mal immer gerne über solche Sachen 
833Gruß Karsten
834
835		</div>
836	</div>
837	
838	
839
840	
841</div>
842
843	</div>
844	
845	
846</li>
847
848			
849			<li component="categories/category" data-cid="30" data-numRecentReplies="1" class="row clearfix">
850	<meta itemprop="name" content="Sonstige Programmiersprachen">
851
852	<div class="content col-xs-12 col-md-7 col-sm-9">
853		<div class="icon pull-left" style="background-color: #7cafc2; color: #ffffff;">
854			<i class="fa fa-fw fa-support"></i>
855		</div>
856
857		<h2 class="title">
858			
859
860<a href="/forum/category/30/sonstige-programmiersprachen" itemprop="url">
861
862Sonstige Programmiersprachen
863</a>
864
865		</h2>
866		<div>
867			
868			<div class="description">
869				<p>Alles zum Thema Programmieren: verschiedene Programmiersprachen, Libraries und Algorithmen.</p>
870
871			</div>
872			
873			
874			<span class="category-children"><span class="category-children-item pull-left"><div class="icon pull-left" style="background-color: #3987a3; color: #fff;"><i class="fa fa-fw hidden"></i></div><a href="/forum/category/25/c-alle-iso-standards"><small>C (alle ISO-Standards)</small></a></span><span class="category-children-item pull-left"><div class="icon pull-left" style="background-color: #57a5c2; color: #333;"><i class="fa fa-fw hidden"></i></div><a href="/forum/category/29/c-und-net"><small>C# und .NET</small></a></span><span class="category-children-item pull-left"><div class="icon pull-left" style="background-color: #678f9e; color: #fff;"><i class="fa fa-fw hidden"></i></div><a href="/forum/category/60/java"><small>Java</small></a></span><span class="category-children-item pull-left"><div class="icon pull-left" style="background-color: #0da0d6; color: #fff;"><i class="fa fa-fw hidden"></i></div><a href="/forum/category/23/assembler"><small>Assembler</small></a></span><span class="category-children-item pull-left"><div class="icon pull-left" style="background-color: #477c8f; color: #fff;"><i class="fa fa-fw hidden"></i></div><a href="/forum/category/40/webzeugs"><small>Webzeugs</small></a></span></span>
875			
876		</div>
877		<span class="visible-xs pull-right">
878			
879			<a class="permalink" href="/forum/post/2625249">
880				<small class="timeago" title="2026-09-25T01:24:21.244Z"></small>
881			</a>
882			
883		</span>
884	</div>
885
886	
887	<div class="col-md-1 hidden-sm hidden-xs stats">
888		<span class="unread human-readable-number" title="58253">58253</span><br />
889		<small>Topics</small>
890	</div>
891	<div class="col-md-1 hidden-sm hidden-xs stats">
892		<span class="unread human-readable-number" title="463478">463478</span><br />
893		<small>Posts</small>
894	</div>
895	
896	<div class="col-md-3 col-sm-3 teaser hidden-xs" component="topic/teaser">
897		<div class="card" style="border-color: #7cafc2">
898	
899	
900	<div component="category/posts">
901		<p>
902			<a href="/forum/user/anon-81275">
903				
904				<span class="user-icon user-img" title="Anon-81275" style="background-color: #3f51b5;">A</span>
905				
906			</a>
907			<a class="permalink" href="/forum/topic/355495/den-polygonschwerpunkt-von-roten-linien-in-einem-png-bild-mittels-javascript-rekonstruieren-und-die-genauen-koordinaten-ermitteln/10">
908				<small class="timeago" title="2026-09-25T01:24:21.244Z"></small>
909			</a>
910		</p>
911		<div class="post-content">
912			@Anon-81275 sagte in Den Polygonschwerpunkt von roten Linien in einem PNG-Bild mittels JavaScript rekonstruieren und die genauen Koordinaten ermitteln?:
913
914private static double normalizeAngle(double angle) {
915while (angle &lt; 0) {
916angle += Math.PI;
917}
918while (angle &gt;= Math.PI) {
919angle -= Math.PI;
920}
921return angle;
922}
923
924Leider ist diese Methode nicht ganz SpotBugs-konform...
925
926M C FL: Using floating-point loop counters can lead to unexpected behavior.  At MapPolygon.java:[line 644]
927
928... Deshalb:
929  private static double normalizeAngle(double angle) {
930    double normalizedAngle = angle % Math.PI;
931    return normalizedAngle &lt; 0 ? normalizedAngle + Math.PI : normalizedAngle;
932  }
933
934
935		</div>
936	</div>
937	
938	
939
940	
941</div>
942
943	</div>
944	
945	
946</li>
947
948			
949			<li component="categories/category" data-cid="5" data-numRecentReplies="1" class="row clearfix">
950	<meta itemprop="name" content="Betriebssysteme">
951
952	<div class="content col-xs-12 col-md-7 col-sm-9">
953		<div class="icon pull-left" style="background-color: #2722d1; color: #ffffff;">
954			<i class="fa fa-fw fa-linux"></i>
955		</div>
956
957		<h2 class="title">
958			
959
960<a href="/forum/category/5/betriebssysteme" itemprop="url">
961
962Betriebssysteme
963</a>
964
965		</h2>
966		<div>
967			
968			<div class="description">
969				<p>Diskussionen und Fragen zu Betriebssystemen bezüglich Ansprechung ihrer Schnittstellen, Entwicklung und Verwendung.</p>
970
971			</div>
972			
973			
974			<span class="category-children"><span class="category-children-item pull-left"><div class="icon pull-left" style="background-color: #1c1aad; color: #333;"><i class="fa fa-fw hidden"></i></div><a href="/forum/category/27/winapi"><small>WinAPI</small></a></span><span class="category-children-item pull-left"><div class="icon pull-left" style="background-color: #423fcc; color: #fff;"><i class="fa fa-fw hidden"></i></div><a href="/forum/category/47/linux-unix"><small>Linux&#x2F;Unix</small></a></span><span class="category-children-item pull-left"><div class="icon pull-left" style="background-color: #2320e3; color: #fff;"><i class="fa fa-fw hidden"></i></div><a href="/forum/category/48/projekt-os-development"><small>Projekt: OS-Development </small></a></span><span class="category-children-item pull-left"><div class="icon pull-left" style="background-color: #1d1b7d; color: #fff;"><i class="fa fa-fw hidden"></i></div><a href="/forum/category/55/dos-und-win32-konsole-nur-lesen"><small>DOS und Win32-Konsole (nur Lesen)</small></a></span></span>
975			
976		</div>
977		<span class="visible-xs pull-right">
978			
979			<a class="permalink" href="/forum/post/2625248">
980				<small class="timeago" title="2026-09-24T20:26:36.691Z"></small>
981			</a>
982			
983		</span>
984	</div>
985
986	
987	<div class="col-md-1 hidden-sm hidden-xs stats">
988		<span class="unread human-readable-number" title="35309">35309</span><br />
989		<small>Topics</small>
990	</div>
991	<div class="col-md-1 hidden-sm hidden-xs stats">
992		<span class="unread human-readable-number" title="238355">238355</span><br />
993		<small>Posts</small>
994	</div>
995	
996	<div class="col-md-3 col-sm-3 teaser hidden-xs" component="topic/teaser">
997		<div class="card" style="border-color: #2722d1">
998	
999	
1000	<div component="category/posts">
1001		<p>
1002			<a href="/forum/user/lorenparker">
1003				
1004				<span class="user-icon user-img" title="LorenParker" style="background-color: #2196f3;">L</span>
1005				
1006			</a>
1007			<a class="permalink" href="/forum/topic/355330/ncursesw-und-der-datentyp-cchar_t/2">
1008				<small class="timeago" title="2026-09-24T20:26:36.691Z"></small>
1009			</a>
1010		</p>
1011		<div class="post-content">
1012			
1013Wenn man sich den Datentyp cchar_t anschaut, dann steht dazu in den ncurses man pages, dass er mehr als ein non spacing character enthalten darf. Weiß jemand, ob die fünf wchar_t, die man in der ncursesw Library gewählt irgend einer Definition aus Unicode entstammen, oder ist das eine mehr oder minder willkürlich gewählte Implementationsdefinition?
1014Gibt es eine Möglichkeit auf einfache Art und Weise abzuleiten, ob ein Zeichen half oder full Size ist (sprich ob es ein klassisches ASCII Zeichen in einem Terminal belegt oder deren zwei)?
1015
1016Die fünf wchar_t in cchar_t sind meines Wissens keine Unicode-Vorgabe, sondern eine Implementationsentscheidung von ncurses. Unicode schreibt nicht vor, wie viele Combining Characters eine Zelle maximal puffern muss. Entscheidend ist eher, dass ein Base Character zusammen mit seinen Nonspacing Marks dargestellt werden kann; die Begrenzung auf fünf ist also eine praktische interne Grenze.
1017Für die Breite würde ich nicht selbst anhand der Unicode-Codepoints zwischen „half“ und „full“ unterscheiden. Dafür gibt es wcwidth() bzw. wcswidth(). wcwidth() liefert typischerweise 0 für Combining Characters, 1 für normale Zeichen und 2 für Wide Characters. Allerdings hängt das Ergebnis auch von Locale und Unicode-/Terminal-Unterstützung ab. Außerdem ist die tatsächliche Darstellung letztlich Sache des Terminals, weshalb wcwidth() nicht in jedem exotischen Fall exakt das Verhalten des Terminals vorhersagen kann.
1018
1019		</div>
1020	</div>
1021	
1022	
1023
1024	
1025</div>
1026
1027	</div>
1028	
1029	
1030</li>
1031
1032			
1033			<li component="categories/category" data-cid="6" data-numRecentReplies="1" class="row clearfix">
1034	<meta itemprop="name" content="Weitere Fachbereiche">
1035
1036	<div class="content col-xs-12 col-md-7 col-sm-9">
1037		<div class="icon pull-left" style="background-color: #a78ab8; color: #fff;">
1038			<i class="fa fa-fw fa-commenting-o"></i>
1039		</div>
1040
1041		<h2 class="title">
1042			
1043
1044<a href="/forum/category/6/weitere-fachbereiche" itemprop="url">
1045
1046Weitere Fachbereiche
1047</a>
1048
1049		</h2>
1050		<div>
1051			
1052			
1053			<span class="category-children"><span class="category-children-item pull-left"><div class="icon pull-left" style="background-color: #9462b3; color: #333;"><i class="fa fa-fw hidden"></i></div><a href="/forum/category/42/mathematik-und-physik"><small>Mathematik und Physik</small></a></span><span class="category-children-item pull-left"><div class="icon pull-left" style="background-color: #877294; color: #fff;"><i class="fa fa-fw hidden"></i></div><a href="/forum/category/53/spiele-grafikprogrammierung"><small>Spiele-&#x2F;Grafikprogrammierung</small></a></span><span class="category-children-item pull-left"><div class="icon pull-left" style="background-color: #b273d9; color: #fff;"><i class="fa fa-fw hidden"></i></div><a href="/forum/category/69/datenbanken"><small>Datenbanken</small></a></span><span class="category-children-item pull-left"><div class="icon pull-left" style="background-color: #ab97b8; color: #fff;"><i class="fa fa-fw hidden"></i></div><a href="/forum/category/34/compiler-und-ide-forum"><small>Compiler- und IDE-Forum</small></a></span><span class="category-children-item pull-left"><div class="icon pull-left" style="background-color: #8e42bd; color: #333;"><i class="fa fa-fw hidden"></i></div><a href="/forum/category/20/projekte"><small>Projekte</small></a></span></span>
1054			
1055		</div>
1056		<span class="visible-xs pull-right">
1057			
1058			<a class="permalink" href="/forum/post/2625168">
1059				<small class="timeago" title="2026-08-29T11:52:05.572Z"></small>
1060			</a>
1061			
1062		</span>
1063	</div>
1064
1065	
1066	<div class="col-md-1 hidden-sm hidden-xs stats">
1067		<span class="unread human-readable-number" title="28395">28395</span><br />
1068		<small>Topics</small>
1069	</div>
1070	<div class="col-md-1 hidden-sm hidden-xs stats">
1071		<span class="unread human-readable-number" title="208969">208969</span><br />
1072		<small>Posts</small>
1073	</div>
1074	
1075	<div class="col-md-3 col-sm-3 teaser hidden-xs" component="topic/teaser">
1076		<div class="card" style="border-color: #a78ab8">
1077	
1078	
1079	<div component="category/posts">
1080		<p>
1081			<a href="/forum/user/jorisclausen">
1082				
1083				<span class="user-icon user-img" title="JorisClausen" style="background-color: #9c27b0;">J</span>
1084				
1085			</a>
1086			<a class="permalink" href="/forum/topic/355488/was-ist-eine-falte/9">
1087				<small class="timeago" title="2026-08-29T11:52:05.572Z"></small>
1088			</a>
1089		</p>
1090		<div class="post-content">
1091			Ja, genau das Beispiel zeigt eigentlich ganz schön, warum „Falte = unstetige Ableitung“ nicht passen kann. Bei einer Falte geht es eher um die Geometrie bzw. darum, dass die Abbildung lokal zwei Bereiche so zusammenführt, dass eine Knicklinie entsteht. Die Ableitung kann dabei durchaus stetig sein – entscheidend ist nicht einfach ein Knick im Graphen, sondern wie die Abbildung die Fläche bzw. den Raum faltet. Das Beispiel aus dem Buch ist dafür ziemlich lehrreich. Letztens musste ich beim langen Mathe-Lernen im kalten Zimmer übrigens an meine warmen Herren-Unterhosen für den Winter denken, weil man bei solchen mathematischen Herleitungen echt schnell friert, wenn man stundenlang am Schreibtisch sitzt und grübelt.
1092
1093		</div>
1094	</div>
1095	
1096	
1097
1098	
1099</div>
1100
1101	</div>
1102	
1103	
1104</li>
1105
1106			
1107			<li component="categories/category" data-cid="72" data-numRecentReplies="1" class="row clearfix">
1108	<meta itemprop="name" content="Jenseits der Programmierung">
1109
1110	<div class="content col-xs-12 col-md-7 col-sm-9">
1111		<div class="icon pull-left" style="background-color: #949494; color: #fff;">
1112			<i class="fa fa-fw fa-comments-o"></i>
1113		</div>
1114
1115		<h2 class="title">
1116			
1117
1118<a href="/forum/category/72/jenseits-der-programmierung" itemprop="url">
1119
1120Jenseits der Programmierung
1121</a>
1122
1123		</h2>
1124		<div>
1125			
1126			<div class="description">
1127				<p>Informationen aus der realen Welt, Fragen nach Uhrzeit und Wetter, heiße Aktientipps und allgemeines Gelaber sowie Austragungsort für ernstgemeinte Diskussionsduelle. Alles was nichts mehr mit Programmierung zu tun hat.</p>
1128
1129			</div>
1130			
1131			
1132			<span class="category-children"><span class="category-children-item pull-left"><div class="icon pull-left" style="background-color: #a1a1a1; color: #a1a1a1;"><i class="fa fa-fw hidden"></i></div><a href="/forum/category/74/beruf-und-ausbildung"><small>Beruf und Ausbildung</small></a></span><span class="category-children-item pull-left"><div class="icon pull-left" style="background-color: #7a7a7a; color: #fff;"><i class="fa fa-fw hidden"></i></div><a href="/forum/category/58/stellenangebote"><small>Stellenangebote</small></a></span><span class="category-children-item pull-left"><div class="icon pull-left" style="background-color: #bdbdbd; color: #333;"><i class="fa fa-fw hidden"></i></div><a href="/forum/category/77/themen-rund-um-die-it"><small>Themen rund um die IT</small></a></span><span class="category-children-item pull-left"><div class="icon pull-left" style="background-color: #575757; color: #fff;"><i class="fa fa-fw hidden"></i></div><a href="/forum/category/70/gaming-corner"><small>Gaming-Corner</small></a></span></span>
1133			
1134		</div>
1135		<span class="visible-xs pull-right">
1136			
1137			<a class="permalink" href="/forum/post/2625254">
1138				<small class="timeago" title="2026-09-25T13:18:53.607Z"></small>
1139			</a>
1140			
1141		</span>
1142	</div>
1143
1144	
1145	<div class="col-md-1 hidden-sm hidden-xs stats">
1146		<span class="unread human-readable-number" title="31151">31151</span><br />
1147		<small>Topics</small>
1148	</div>
1149	<div class="col-md-1 hidden-sm hidden-xs stats">
1150		<span class="unread human-readable-number" title="414724">414724</span><br />
1151		<small>Posts</small>
1152	</div>
1153	
1154	<div class="col-md-3 col-sm-3 teaser hidden-xs" component="topic/teaser">
1155		<div class="card" style="border-color: #949494">
1156	
1157	
1158	<div component="category/posts">
1159		<p>
1160			<a href="/forum/user/seppj">
1161				
1162				<img class="user-img" title="SeppJ" alt="SeppJ" src="/forum/assets/uploads/profile/19375-profileavatar.png">
1163				
1164			</a>
1165			<a class="permalink" href="/forum/topic/355420/pro-contra-ki-eigene-erfahrungen/39">
1166				<small class="timeago" title="2026-09-25T13:18:53.607Z"></small>
1167			</a>
1168		</p>
1169		<div class="post-content">
1170			Meine Erfahrung mit aktuellen Premiummodellen ist immer noch, dass man ihnen selbstständig bloß Juniorentwickleraufgaben geben kann, wo man dann hinterher auch nochmals gründlich drübergucken muss. Dabei wird es immer schwieriger die Fehler zu finden, aber es sind immer noc
1170h zu häufig grobe Böcke drin, als dass ich dem ungesehen vertrauen würde. Und halt stets so zuversichtlich, wo dann am Code kommentiert ist, was das machen soll, aber erst wenn man 3x guckt, merkt man, das stimmt gar nicht. Das ist dann besonders gefährlich, weil man nicht bloß querlesen kann, ob etwas sinnvoll aussieht, sondern man muss es wirklich komplett durchdenken, ob das stimmt. Wenn man dann auf die Fehler zeigt, tendieren sie auch dazu, Dinge kaputt zu reparieren. Das ist dann vergleichbar viel Aufwand wie selber schreiben.
1171Umgekehrt ist es hingegen höchst nützlich, wenn man sie benutzt, um den eigenen Code zu kritisieren. Da kann man dann ja schnell beurteilen, ob ein Einwand gerechtfertigt ist oder ob ein Verbesserungsvorschlag wirklich besser ist. Da bekommt man schneller viel mehr nützliche Vorschläge und Einwände als selbst der kritischte Reviewer einem geben könnte. Wenn davon dann nicht alle gerechtfertigt sind, ist das ja nicht weiter schlimm, man muss sie ja nicht umsetzen. Das finde ich schon sehr hilfreich und will ich nicht mehr vermissen.
1172Was auch geht sind Fleißaufgaben so a la &quot;Mit diesem (von mir geschriebenen) Test als Vorbild schreibe weitere Tests für folgende Szenarien [...] und mach Vorschläge für was noch fehlen könnte&quot;
1172. Muss man auch nochmal draufgucken, aber da ist es dann auch nicht so kritisch, und die Chancen, dass es falsch ist, sind kleiner.
1173
1174		</div>
1175	</div>
1176	
1177	
1178
1179	
1180</div>
1181
1182	</div>
1183	
1184	
1185</li>
1186
1187			
1188			<li component="categories/category" data-cid="35" data-numRecentReplies="1" class="row clearfix">
1189	<meta itemprop="name" content="Forentechnik">
1190
1191	<div class="content col-xs-12 col-md-7 col-sm-9">
1192		<div class="icon pull-left" style="background-color: #f7ca88; color: #333333;">
1193			<i class="fa fa-fw fa-cogs"></i>
1194		</div>
1195
1196		<h2 class="title">
1197			
1198
1199<a href="/forum/category/35/forentechnik" itemprop="url">
1200
1201Forentechnik
1202</a>
1203
1204		</h2>
1205		<div>
1206			
1207			<div class="description">
1208				<p>Hier kann man über die neue Forumsoftware diskutieren.<br />
1209Kritik, Lob, Probleme, Lösungen usw.</p>
1210
1211			</div>
1212			
1213			
1214			
1215			
1216		</div>
1217		<span class="visible-xs pull-right">
1218			
1219			<a class="permalink" href="/forum/post/2625111">
1220				<small class="timeago" title="2026-08-19T14:23:29.522Z"></small>
1221			</a>
1222			
1223		</span>
1224	</div>
1225
1226	
1227	<div class="col-md-1 hidden-sm hidden-xs stats">
1228		<span class="unread human-readable-number" title="1750">1750</span><br />
1229		<small>Topics</small>
1230	</div>
1231	<div class="col-md-1 hidden-sm hidden-xs stats">
1232		<span class="unread human-readable-number" title="15005">15005</span><br />
1233		<small>Posts</small>
1234	</div>
1235	
1236	<div class="col-md-3 col-sm-3 teaser hidden-xs" component="topic/teaser">
1237		<div class="card" style="border-color: #f7ca88">
1238	
1239	
1240	<div component="category/posts">
1241		<p>
1242			<a href="/forum/user/anon-81275">
1243				
1244				<span class="user-icon user-img" title="Anon-81275" style="background-color: #3f51b5;">A</span>
1245				
1246			</a>
1247			<a class="permalink" href="/forum/topic/355486/ab-wann-kann-man-postings-bewerten/25">
1248				<small class="timeago" title="2026-08-19T14:23:29.522Z"></small>
1249			</a>
1250		</p>
1251		<div class="post-content">
1252			Wenn ihr die Richtigkeit meiner Aussage weiter anzweifelt, könnte ich ja mal die Gegenfrage stellen, welche Unterschiede ihr denn zwischen Rassist und Nazi seht... Aber ich glaube, das wäre tatsächlich der Diskussion nicht förderlich. Also lasst die Beleidigungen doch einfach.
1253
1254		</div>
1255	</div>
1256	
1257	
1258
1259	
1260</div>
1261
1262	</div>
1263	
1264	
1265</li>
1266
1267			
1268		</ul>
1269	</div>
1270	<div widget-area="sidebar" class="col-lg-3 col-sm-12 hidden">
1271		
1272	</div>
1273</div>
1274<div widget-area="footer">
1275	
1276	<footer id="footer" class="container footer"><div>
1277<a href="/datenschutz.html">Datenschutz</a> | <a target="_blank" href="/impressum.html">Impressum</a>
1278</div><div>
1279Powered by <a target="_blank" href="https://nodebb.org">NodeBB</a> | <a target="_blank" href="//github.com/NodeBB/NodeBB/graphs/contributors">Contributors</a></div>
1280</footer>
1281	
1282</div>
1283<script id="ajaxify-data" type="application/json">{"title":"[[pages:home]]","categories":[{"bgColor":"#edbb26","cid":12,"class":"col-md-3 col-xs-6","color":"#fff","description":"","descriptionParsed":"","disabled":0,"icon":"fa-bullhorn","imageClass":"cover","link":"","name":"Ankündigungen","numRecentReplies":1,"order":1,"parentCid":0,"post_count":111,"slug":"12/ankündigungen","topic_count":5,"isSection":0,"totalPostCount":1804,"totalTopicCount":102,"tagWhitelist":[],"unread-class":"unread","children":[{"bgColor":"#edbb26","cid":59,"class":"col-md-3 col-xs-6","color":"#fff","description":"Das kostenlose Onlinemagazin zu C++ und verwandten Themen","descriptionParsed":"<p>Das kostenlose Onlinemagazin zu C++ und verwandten Themen<\/p>\n","disabled":0,"icon":"hidden","imageClass":"cover","link":"","name":"Die Artikel","numRecentReplies":1,"order":20,"parentCid":12,"post_count":1693,"slug":"59/die-artikel","topic_count":97,"isSection":0,"totalPostCount":1693,"totalTopicCount":97,"tagWhitelist":[],"unread-class":"unread","children":[],"parent":{"bgColor":"#edbb26","cid":12,"class":"col-md-3 col-xs-6","color":"#fff","description":"","descriptionParsed":"","disabled":0,"icon":"fa-bullhorn","imageClass":"cover","link":"","name":"Ankündigungen","numRecentReplies":1,"order":1,"parentCid":0,"post_count":111,"slug":"12/ankündigungen","topic_count":5,"isSection":0,"totalPostCount":111,"totalTopicCount":5,"tagWhitelist":[],"unread-class":"unread"},"posts":[{"pid":2622013,"timestamp":1721383521760,"content":"@omggg Es gibt kein Modernes Exception Handling, da keine Ausnahmen stattfinden. Wenn doch ist was anderes unbrauchbar.\n","timestampISO":"2024-07-19T10:05:21.760Z","user":{"username":"[[global:former_user]]","userslug":"","picture":"","oldUid":30533,"icon:text":"?","icon:bgColor":"#aaa","groupTitle":"","groupTitleArray":[]},"index":22,"cid":59,"parentCid":12,"topic":{"slug":"219865/modernes-exception-handling-teil-2-hinter-den-kulissen","title":"Modernes Exception-Handling Teil 2 - Hinter den Kulissen"}}]}],"posts":[{"pid":2623952,"timestamp":1749414654836,"content":"@Dravere Ok, dann ist die Sache vom Tisch.\n","timestampISO":"2025-06-08T20:30:54.836Z","user":{"username":"GenXy","userslug":"genxy","picture":"","icon:text":"G","icon:bgColor":"#e91e63"},"index":14,"cid":12,"parentCid":0,"topic":{"slug":"355319/aktuelle-forumprobleme-2025-06-06","title":"Aktuelle Forumprobleme 2025-06-06"}}],"teaser":{"url":"/forum/post/2623952","timestampISO":"2025-06-08T20:30:54.836Z","pid":2623952,"topic":{"slug":"355319/aktuelle-forumprobleme-2025-06-06","title":"Aktuelle Forumprobleme 2025-06-06"}}},{"bgColor":"#1e8f5c","cid":33,"class":"col-md-3 col-xs-6","color":"#f7f7f7","description":"Fragen zu Funktionen und Abläufen in C++ (C++98, C++03, C++11, C++14, C++17), um zu erfahren was pure virtual bedeutet, wie das mit Templates, STL und Boost geht. Bitte keine Fragen zu Windows&#x2F;Linux-Programmierung hier posten!","descriptionParsed":"<p>Fragen zu Funktionen und Abläufen in C++ (C++98, C++03, C++11, C++14, C++17), um zu erfahren was pure virtual bedeutet, wie das mit Templates, STL und Boost geht. Bitte keine Fragen zu Windows/Linux-Programmierung hier posten!<\/p>\n","disabled":0,"icon":"fa-gittip","imageClass":"cover","link":"","name":"C++ (alle ISO-Standards)","numRecentReplies":1,"order":3,"parentCid":0,"post_count":576440,"slug":"33/c-alle-iso-standards","topic_count":62763,"isSection":0,"totalPostCount":948085,"totalTopicCount":129333,"tagWhitelist":[],"unread-class":"unread","children":[{"bgColor":"#198553","cid":19,"class":"col-md-3 col-xs-6","color":"#fff","description":"Fragen zu den MFC (Microsoft Foundation Classes). WinForms haben mit MFC übrigens nichts zu tun.","descriptionParsed":"<p>Fragen zu den MFC (Microsoft Foundation Classes). WinForms haben mit MFC übrigens nichts zu tun.<\/p>\n","disabled":0,"icon":"hidden","imageClass":"cover","link":"","name":"MFC","numRecentReplies":1,"order":1,"parentCid":33,"post_count":172825,"slug":"19/mfc","topic_count":32670,"isSection":0,"totalPostCount":172825,"totalTopicCount":32670,"tagWhitelist":[],"unread-class":"unread","children":[],"parent":{"bgColor":"#1e8f5c","cid":33,"class":"col-md-3 col-xs-6","color":"#f7f7f7","description":"Fragen zu Funktionen und Abläufen in C++ (C++98, C++03, C++11, C++14, C++17), um zu erfahren was pure virtual bedeutet, wie das mit Templates, STL und Boost geht. Bitte keine Fragen zu Windows&#x2F;Linux-Programmierung hier posten!","descriptionParsed":"<p>Fragen zu Funktionen und Abläufen in C++ (C++98, C++03, C++11, C++14, C++17), um zu erfahren was pure virtual bedeutet, wie das mit Templates, STL und Boost geht. Bitte keine Fragen zu Windows/Linux-Programmierung hier posten!<\/p>\n","disabled":0,"icon":"fa-gittip","imageClass":"cover","link":"","name":"C++ (alle ISO-Standards)","numRecentReplies":1,"order":3,"parentCid":0,"post_count":576440,"slug":"33/c-alle-iso-standards","topic_count":62763,"isSection":0,"totalPostCount":576440,"totalTopicCount":62763,"tagWhitelist":[],"unread-class":"unread"},"posts":[{"pid":2625246,"timestamp":1790280002716,"content":"@Finnegan sagte in Rail Road Tycoon MFC in Action:\n\nway E\n\nHey Finnegan,\nDas Projekt ist auch auf GitHub, https://github.com/KahnSoft/FlexxRail\nHab da nicht ganz die Muße, mir den Code anzusehen\nJa ist auch nur ein Fetzen, zeigt aber den Vorgang der Chunk -Generierung ohne Cracks untereinander, da spielt ein gewisses Micro Overlapping eine rolle, das am ende aber kein Brot frisst (+2 auf den sizes der Chunks) Es wird sonnst Abstrus Rechen lastig wenn man da keine Tricks anwendet, also alles ist immer ein Kompromiss zwischen best of und Perform. Wenn man da Hunderte Loks mit Anhängern anzeigt, braucht man jeden Rechenquant, solange kein Gameplay statt findet, muss ich immer 1Khz Framerate erreichen, sonnst ist es später vorbei, also minimalste Operationen mit bestmöglichen Ergebnis.\n
1283die Berglandschaft in dem Video ist nicht unbedingt eine Heightmap-Geometrie sondern ein eventuell generischeres 3D-Modell\nGenau es ist keine Highmap es ist alles dynamisch mit der Perlin Noise erzeugtes Grid- dessen Höhenwerte vom Shader mit Texpixeln im shader Texturmischer belegt werden,  ich erzeuge damit riesige Karten mit Kantenlängen von bis zu 1 Million Dreiecke Seitenlänge was riesig ist, die Loks fahren mit rund 145Kmh alles bereist authentisch proportional, und ich kann die Kamera auf eine Fahrende Lok aufschalten und diese verfolgen, die benötigt in diesem Affentempo rund 5 Minuten um eine Seitenlänge zu passieren. Eine Highmap dieser Größe sprengt den Speicherrahmen , es ist auch nicht gerade günstig eine Textur zu haben die 10000 Pixel Breit und Hoch ist. Man nennt das mit vielen Highmaps dann Content-Streaming DirectX SDK macht das vor, aber ich muss wie gesagt insgesamt die Performance erhalten ,  es können später tausende Objekte mit den Chunks und dem LodSystem so veraltet werden. Da bin ich auch froh drüber es ohne ContentStreaming und Ohne HighMaps gemacht zu haben, zumal nach der Highmap dann nochmal selbige ColorMap als Textur benötigt wird, alles wird also Dynamisch zur Laufzeit erzeugt, die Qualität ist natürlich nicht die einer ColorMap, aber sie ist apokalyptisch groß, es wird also keine 3D -Lok Simulation wo jedes Gauge im Kesselhaus zu sehen ist, das zerbricht die Welt der unendlichen Weiten , das wird der große Vorteil gegenüber statischer Körperwelten. Also Aktienhandel Resourcenabbau alles Basiert auf Primitives, in einer erschlagenden Dimension.\nNur die Ränder der &quot;Szene&quot;,\nGenau keine Cracks in der Szene (NoGo) lediglich die Ränder haben eine Treppensignatur, aber die könnte ich wegrechnen ist aber unnötig out of SkyBox\nParametrischen Kurven (Splines) meist eine Variable &quot;Geschwindigkeit&quot; haben.\nDa die Lok die Spline kennt (also die errechnet die selbst , es existieren real nur Kontrollpunkte) erzeugt sie für die Kurvigkeit eine Speed-Drossel die wirkt für Aufstieg bremsend für Abstieg Beschleunigend und für rechts links Radien Bremsend.\nvoid CSplineObjFollow::CalcSpeed()\n{\n  const int dirSz = (int)m_DirN.size();\n  if (m_SplineIdx &lt; 0 || m_SplineIdx &gt;= dirSz)\n  {\n    m_ConsecUphill = 0;\n    m_ConsecDownhill = 0;\n    m_ConsecCurve = 0;\n    m_UphillFlt *= 0.9f;\n    m_DownhillFlt *= 0.9f;\n    m_CurveFlt *= 0.9f;\n    m_LastSpeedFactor = 1.0f;\n    return;\n  }\n\n  // Calculate Slope directly\n  const float s = m_DirN[m_SplineIdx].z;\n\n  // Calculate Curvature directly\n  float avgCurv = 0.0f;\n  int curvSamples = 0;\n  const int splineSz = (int)m_Spline.size();\n\n  if (splineSz &gt;= 3)\n  {\n      const int maxCenter = splineSz - 2;\n      CVertex* splinePtr = m_Spline.data();\n      int si, center;\n      float c;\n\n      for (si = 0; si &lt; 3; ++si)\n      {\n          center = m_SplineIdx + si;\n          if (center &lt; 1) center = 1;\n          else if (center &gt; maxCenter) center = maxCenter;\n\n          c = Spline::LocalCurvature(splinePtr[center - 1], splinePtr[center], splinePtr[center + 1]);\n          if (c &gt; 0.0f) { avgCurv += c; ++curvSamples; }\n      }\n\n      if (curvSamples) avgCurv /= (float)curvSamples;\n  }\n\n  const float absS = fabsf(s);\n  float factor = 1.0f;\n\n  if (absS &gt; SFF_EFFECT_THR)\n  {\n    float eff = absS - SFF_EFFECT_THR;\n    if (s &gt; 0.0f)                                                          // Bergauf: langsamer\n    {\n      if (eff &gt; SFF_MAX_UP_EFF) eff = SFF_MAX_UP_EFF;\n      factor -= eff * m_UphillFlt;\n    }\n    else                                                                   // Bergab: schneller\n    {\n      if (eff &gt; 0.10f) eff = 0.10f;\n      factor += eff * m_DownhillFlt;\n    }\n  }\n\n  if (avgCurv &gt; 1e-5f) ++m_ConsecCurve; else if (m_ConsecCurve &gt; 0) --m_ConsecCurve;\n\n  const float invUp = 1.0f / (float)SFF_CONSEC_FULL_UP;\n  const float uphillTarget = (m_ConsecUphill &gt; 0) ? (m_ConsecUphill * invUp) : 0.0f;\n  const float downhillTarget = (m_ConsecDownhill &gt; 0) ? (m_ConsecDownhill * invUp) : 0.0f;\n  const float curveTarget = (avgCurv &gt; 0.0f) ? (avgCurv / (avgCurv + 0.003f) * 1.5f) : 0.0f;\n\n  m_UphillFlt += (uphillTarget - m_UphillFlt) * ((uphillTarget &gt; m_UphillFlt) ? SFF_RISE : SFF_DECAY);\n  m_CurveFlt += (curveTarget - m_CurveFlt) * ((curveTarget &gt; m_CurveFlt) ? SFF_RISE : SFF_DECAY);\n  m_DownhillFlt += (downhillTarget - m_DownhillFlt) * ((downhillTarget &gt; m_DownhillFlt) ? SFF_RISE : SFF_DECAY);\n\n  if (m_CurveFlt &gt; 0.0f)                                                   // Kurven: langsamer\n  {\n    float tmp = 1.0f - SFF_CURVE_MAX_RED * (m_CurveFlt * (1.0f + 0.65f * m_CurveFlt) * (1.0f + 0.75f * m_
1283CurveFlt));\n    if (tmp &lt; 0.1f) tmp = 0.1f;\n    factor *= tmp;\n  }\n\n  if (factor &lt; 0.25f) factor = 0.25f;\n  else if (factor &gt; 1.5f) factor = 1.5f;\n\n  const float smooth = (factor &lt; m_LastSpeedFactor) ? SFF_SPEED_SMOOTH_DOWN : (SFF_SPEED_SMOOTH_UP / (1.0f + m_Speed * SFF_SPD_SMOOTH_SCL));\n  m_LastSpeedFactor += (factor - m_LastSpeedFactor) * smooth;\n}\n\nvoid CSplineObjFollow::CalcSpeedA()\n{\n  float factor = 1.0f;\n  const int dirSz = (int)m_DirN.size();\n\n  if (dirSz &gt;= 2 &amp;&amp; m_SplineIdx &gt;= 0)\n  {\n    float maxProxy = 0.0f;\n    const CVertex *dirPtr = m_DirN.data();\n\n    for (int i = 0; i &lt; 3; ++i)\n    {\n      int pidx = m_SplineIdx + i;\n      if (pidx &lt; 1) pidx = 1;\n      else if (pidx &gt;= dirSz) pidx = dirSz - 1;\n\n      int p0 = (pidx &gt; 0) ? pidx - 1 : 0;\n      float d = dirPtr[p0].Dot(dirPtr[pidx]);\n      if (d &gt; 1.0f) d = 1.0f;\n      else if (d &lt; -1.0f) d = -1.0f;\n\n      float proxy = 1.0f - d;\n      if (proxy &gt; maxProxy) maxProxy = proxy;\n    }\n\n    const float curveEffect = (maxProxy &gt; 0.0f) ? (maxProxy / (maxProxy + 0.001f)) : 0.0f;\n    m_CurveFlt += (curveEffect - m_CurveFlt) * ((curveEffect &gt; m_CurveFlt) ? SFF_RISE : SFF_DECAY);\n    factor = 1.0f - SFF_CURVE_MAX_RED * (curveEffect * (1.0f + 0.75f * m_
1283CurveFlt));\n  }\n\n  if (factor &lt; 0.15f) factor = 0.15f;\n  else if (factor &gt; 1.5f) factor = 1.5f;\n\n  float alpha = 0.20f + 0.55f * (1.0f - factor);\n  if (alpha &gt; 1.0f) alpha = 1.0f;\n  if (factor &lt; m_LastSpeedFactor) alpha = alpha * 0.9f + 0.5f * (1.0f - alpha);\n\n  m_LastSpeedFactor += (factor - m_LastSpeedFactor) * alpha;\n}\n\nDiese Verfolgung von Tracks wird also in separaten Threads berechnet, und für jede Lok durchlaufen, da gibt es nicht die geringsten Probleme mit der Render Geschwindigkeit , es wird also kein Normal benötigt um die Geschwindigkeit auf den Dynamischen Tracks zu erhalten, die allerdings über normal vektoren verfügen, jedoch nie von der Mechanik abgefragt werden, die Tracks haben auch eine Beschreibung über den sog. TrackFragmentGenerator:\n/*\n==========================================================\nTrackFragment Eigenschaften &amp; Geometrie-Regelwerk\n==========================================================\n\n1) Grundstruktur (RNA1):\n   - Ein TrackFragment besteht aus mehreren Einzelteilen: Balast, Slicer (Schienen), Sleeper (Schwellen).\n   - Die Geometrie wird entlang einer Eingangsspline (VertexLst) erzeugt und verteilt.\n   - Jeder Einzelteiltyp hat eigene Parameter und Farben.\n\n2) Balast (RNA1):\n   - Wird als U-Profil ohne Boden generiert.\n   - Besteht aus Seitenwänden und Dach, keine Unterseite.\n   - Die Breite und Höhe sind abhängig vom Maßstab (scale).\n   - Die Balast-Spline wird mit niedriger Dichte (Subsampling) erzeugt.\n   - Speicherbedarf steigt mit Dichte und Länge der Spline.\n\n3) Slicer (Schienen) (RNA1):\n   - Werden als U-Profile ohne Boden generiert.\n   - Bestehen aus Seitenwänden und Dach, keine Unterseite.\n   - Slicer sind schmaler und höher als der Balast.\n   - Es werden zwei Slicer erzeugt: linke und rechte Schiene, jeweils entlang der Spline versetzt.\n   - Slicer erhalten eine eigene Farbe für Seiten und Dach.\n   - Subsampling reduziert Speicher und Rechenlast.\n\n4) Sleeper (Schwellen) (RNA1):\n   - Werden als Quader erzeugt, keine U-Profile.\n   - Liegen quer zur Spline und verbinden die beiden Slicer.\n   - Die Platzierung erfolgt gleichmäßig entlang der Spline, am Anfang, Ende und dazwischen.\n   - Sleeper erhalten eigene Farben für Seiten und Oberseite.\n   - Anzahl und Abstand beeinflussen die Komplexität.\n\n5) Geometrie-Erzeugung (RNA1):\n   - Die Methode GenerateVbo erzeugt die Einzelteile entlang der Spline.\n   - Für Balast und Slicer wird die Spline mit unterschiedlichen Schrittweiten abgetastet (Subsampling).\n   - Die Geometrie wird als Vertex-, Normal-, Color- und Index-Arrays für das VBO erzeugt.\n   - Datenfluss: Spline -&gt; Sampling -&gt; Einzelteil -&gt; VBO.\n\n6) Farben und Materialien (RNA1):\n   - Jede Komponente (Balast, Slicer, Sleeper) erhält eigene Farben für Seiten und Dach/Oberseite.\n   - Die Farben werden beim Erzeugen der Vertices zugewiesen.\n   - Farbwechsel im Code beachten.\n\n7) VBO-Handling (RNA1):\n   - Die erzeugten Geometrien werden in einem VBOSet gespeichert.\n   - Nach der Erzeugung wird das VBO für die Darstellung vorbereitet.\n   - Speicherbedarf und Performance hängen von der Anzahl der Vertices und Indices ab.\n\n8) Besonderheiten (RNA1):\n   - Die Geometrie ist so ausgelegt, dass keine Bodenflächen für U-Profile entstehen.\n   - Die Verteilung und Ausrichtung der Einzelteile erfolgt dynamisch entlang der Eingangsspline.\n   - Fehlerquellen: Indizierung, Subsampling, falsche Parameter.\n\n9) Komplexitätsfaktoren (KI-relevant):\n   - Anzahl und Dichte der Einzelteile (Balast, Slicer, Sleeper).\n   - Länge und Form der Eingangsspline.\n   - Subsampling-Parameter und Profilgrößen.\n   - VBO-Speicherbedarf und Render-Performance.\n   - Korrekte Indizierung und Farbzuteilung.\n   - Robustheit gegen fehlerhafte Eingabedaten.\n\n10) Speicherverwaltung und Vektorzugriffe (RNA1):\n   - Alle Geometrie-Daten werden in std::vector gespeichert.\n   - Jeder push/remove/clear/erase-Aufruf ruft automatisch die Destruktoren der enthaltenen Objekte auf.\n   - Dadurch werden Ressourcen immer korrekt freigegeben.\n   - Speicherlecks sind ausgeschlossen, solange keine rohen Zeiger verwendet werden.\n\n11) LOD-Rendering für entfernte Fragmente (RNA1):\n   - Ab einer Entfernung von TRACK_LOD_DIST werden weniger Indices im VBO gezeichnet.\n   - Ein visueller Hinweis (z.B. &quot;LOD aktiv&quot;) wird rechtsbündig am Fragment angezeigt.\n   - Die LOD-Distanz ist als TRACK_LOD_DIST im Code definiert.\n   \n   LOD-Priorität (VBO-Reihenfolge, Index 0 = höchste Priorität):\n   +-------+------------------+---------------+---------------------------+\n   | Phase | Komponente       | LOD-Priorität | Beschreibung              |\n   +-------+------------------+---------------+---------------------------+\n   |   1   | Gauges           | Höchste       | Lichttafel (4 Lichter)    |\n   |   1   | Dipper           | Höchste       | Signalflügel              |\n   |   2   | Switch-Cube      | Hoch          | Weichen-Hitbox            |\n   |   3   | Terminal         | Hoch          | Bahnsteig-Geometrie       |\n   |   4   | Signal-Mast      | Mittel        | Stange + Sockel           |\n   |   5   | Prellbock        | Mittel        | Buffer Stop               |\n   |   6   | Ballast          | Niedrig       | Schotter (viele Faces)    |\n   |   6   | Slicer           | Niedrig       | Schienen (viele Faces)    |\n   |   6   | Sleeper          | Niedrig       | Schwellen (viele Faces)   |\n   +-------+------------------+---------------+---------------------------+\n   \n   Bei LOD-Reduktion werden zuerst Sleeper/Slicer/Ballast weggelassen,\
1283n   Gauges und Dipper bleiben bis zuletzt sichtbar.\n\n12) Switch-Cube für Weichen (RNA2):\n   - Wird nur bei TYPE_SWITCH_TRK erzeugt.\n   - Besteht aus einem Würfel (Cube) und einem Sockel (Pyramiden-Stumpf) neben dem Gleis am Ende der Spline.\n   - Position: Neben dem Balast in Fahrtrichtung, versetzt um die halbe Balast-Breite plus zusätzlichen Abstand.\n   - Größe: Würfel hat scale * 1.6f Größe, Sockel ist doppelt so breit.\n   - Farben: Würfel in Slicer-Farben (Grün=Open, Rot=Closed), Sockel in Balast-Farben.\n   - Zweck: Visuelle Darstellung von Weichen-Switches mit Statusanzeige (Open/Closed).\n   - Bounding Box: Separate m_SwitchBBoxMin/Max für Kollision oder Selektion.\n\n13) Signal-Mast für Weichen &amp; Strecken (RNA3):\n   - Wird bei TYPE_SWITCH_TRK (automatisch) oder via SnapIn (manuell) erzeugt.\n   - Besteht aus mehreren Komponenten:\n     a) Sockel: Pyramiden-Stumpf auf Terrain-Höhe\n     b) Mast: Zwei vertikale Streben (Leiter-Stil) mit Sprossen\n     c) Kopfstück: Horizontaler Balken am oberen Ende\n     d) Ausleger: Horizontale Stäbe zur Seitenstabilisierung\n     e) Dipper: Beweglicher Signal-Flügel (Formsignal)\n     f) Gauge: Lichttafel mit 4 Signallichtern (Hp0/Hp1/Hp2)\n   - Position:\n     * Weichen: Automatisch in der Mitte der Spline.\n     * Strecken: An definierter SnapIn-Position (dotIdx).\n   - Dipper-Zustände:\n     * TYPE_SIGNAL_OPEN gesetzt: Dipper horizontal (Hp0 = Halt)\n     * TYPE_SIGNAL_OPEN nicht gesetzt: Dipper nach unten (Hp1 = Fahrt frei)\n   - Farben: Mast in Balast-Farben, Dipper rot mit weißer Füllung und Ring.\n   - Bounding Box: Separate m_SignalBoxes für Klick-Erkennung (umschließt gesamten Mast).\n   - Debug-Anzeige: Weiße Box, roter Text &quot;Hp0&quot;/&quot;Hp1&quot;.\n   - Lok-Steuerung: Signal-Status wird in SnapIn.flags gespeichert.\n\n14) Prellbock / Buffer Stop (RNA4):\n   - Wird automatisch bei TYPE_PILLER_TRK erzeugt (Track mit offenem Ende).\n   - Erkennung: forwardFragmentId == -1 ODER backwardFragmentId == -1.\n   - Position: Am Gleisende, versetzt um 3 * SLEEPER_PITCH nach hinten.\n   - Struktur:\n     a) Gleis-Extension: Echtes Gleis (Balast/Slicer/Sleeper) vom Ende bis zum Prellbock.\n     b) Schraege Stuetzen: 2x 45-Grad Hypotenuse (links/rechts auf Schienen).\n     c) Vertikale Kateten: 2x senkrechte Pfosten hinter den Stuetzen.\n     d) Querbalken oben: Horizontaler Balken zwischen den Kateten-Spitzen.\n     e) Querbalken unten: Horizontaler Balken am Fuss der Stuetzen.\n   - Doppelgleis: 2 separate Prellboecke mit Gleisabstand versetzt.\n   - Verkehrsvertrag: Am Prellbock dreht nur die Fahrtrichtung der Lok. Ihre\n     m_TrackSide bleibt unveraendert; der seitliche Render-Offset wird gespiegelt.\n     Bei einem Doppelgleis-Hostwechsel wird zusaetzlich die Weltposition fuer\n     die Seitenkontinuitaet ausgewertet, damit Weichen keinen Spurwechsel erzeugen.\n   - Farben: Stuetzen grau, Querbalken in Sleeper-Farben.\n   - Rekursionsschutz: TYPE_PILLER_TRK wird fuer Extension-Spline entfernt.\n\n15) Terminal / Bahnsteig (RNA5):\n   - Länge basiert auf Zuglänge: TERMINAL_WAGON_LEN × TERMINAL_MAX_WAGONS = 15000 units\n   - 1 Waggon/Lok = 1500 units, Max 10 Waggons am Bahnsteig\n   - Z-Ebene: Einheitliche Höhe (Mittelwert aller Dots) - keine Wellen!\n   - Zwei Signale (A + B) an den Enden für Face-to-Face Steuerung.\n   - Dynamische Verkürzung wenn Track zu kurz ist.\n\n16) Verkehr &amp; Fahrplaner (RNA6):\n   - Die Basis-Verkehrslogik ist aktiv: physische Doppelgleis-Seiten,\n     Bremsen und Disaster-Erkennung laufen in GLSceneTraffic.\n   - Ein globaler Fahrplaner/Scheduler über dieser Basis bleibt geplant.\n   - Er nutzt RNA1-5 (Gleise, Weichen, Signale, Prellboecke, Terminals)\n     fuer Zeitsteuerung und Automatisierung von Weichen/Signalen.\n*/\n\n\nnicht in jedem Frame machen. Die Geometrie der Lok und Waggons bedingt ja einen minimalen Krümmungsradius.\nTatsächlich wird es sogar öfters berechnet als pro jedem Frame, das geht mit bis zu 20 tausend Iterationen also 20Khz\nin den Threads, die Loks fahren seidig und extrem Pixel genau auf den Gleiskörpern.\nDurch die Translationen für die Lok -Mesh Körper werden diese exact an der Spline geführt dazu wird für die Loks eine Pivot-Translation verwendet:\nvoid CGLmatrix::TranslatePivotXYZTrack(const CVertex&amp; world, CVertex&amp; pivot, const CVertex&amp; forward, const CVertex&amp; right, const CVertex&amp; up)\n{\n\tfloat* m = m_m0;\n\n\t// Snapshot original orientation (R0) and translation (t0)\n\tconst float r0x = m[0],  r0y = m[1],  r0z = m[2];\n\tconst float r1x = m[4],  r1y = m[5],  r1z = m[6];\n\tconst float r2x = m[8],  r2y = m[9],  r2z = m[10];\n\tfloat       tx  = m[12], ty  = m[13], tz  = m[14];\n\n\t// Phase 1: t1 = t0 + R0 * (world + pivot)\n\tconst float v0x = world.x + pivot.x;\n\tconst float v0y = world.y + pivot.y;\n\tconst float v0z = world.z + pivot.z;\n\ttx += r0x * v0x + r1x * v0y + r2x * v0z;\n\tty += r0y * v0x + r1y * v0y + r2y * v0z;\n\ttz += r0z * v0x + r1z * v0y + r2z * v0z;\n\n\t// Phase 2: DIREKTE Matrix-Orientierung aus Spline-Basis (statt Euler-Rotation)\n\t// R' = R0 * SplineBasis (Forward, Right, Up direkt verwenden)\n\tm[0] = r0x * forward.x + r1x * forward.y + r2x * forward.z;\n\tm[1] = r0y * forward.x + r1y * forward.y + r2y * forward.z;\n\tm[2] = r0z * forward.x + r1z * forward.y + r2z * forward.z;\n\t\n\tm[4] = r0x * right.x + r1x * right.y + r2x * right.z;\n\tm[5] = r0y * right.x + r1y * right.y + r2y * right.z;\n\tm[6] = r0z * right.x + r1z * right.y + r2z * right.z;\n\t\n\tm[8] = r0x * up.x + r1x * up.y + r2x * up.z;\n\tm[9] = r0y * up.x + r1y * up.y + r2y * up.z;\n\tm[10] = r0z * up.x + r1z * up.y + r2z * up.z;\n\n\t// Phase 3: t' = t1 + R' * (-pivot)\n\ttx += m[0] * (-pivot.x) + m[4] * (-pivot.y) + m[8]  * (-pivot.z);\n\tty += m[1] * (-pivot.x) + m[5] * (-pivot.y) + m[9]  * (-pivot.z);\n\ttz += m[2] * (-pivot.x) + m[6] * (-pivot.y) + m[10] * (-pivot.z);\n\tm[12] = tx; m[13] = ty; m[14] = tz; // keep m[15] as is\n}\n\n\nUnd für normale nicht dem Track folgender Objekte eine Pivot normale Translation (Beides Teil der GL Engine wo jede Matrix wenn sie fertig im Speicher liegt nur einmal per Frame an GL gesendet wird was zu wahnsinnigen Ablaufraten führt:\nvoid CGLmatrix::TranslatePivotXYZ(const CVertex&amp; world,  CVertex&amp; pivot, const CVertex&amp; rot)\n{\n\tfloat* m = m_m0;\n\n\t// Snapshot original orientation (R0) and translation (t0)\n\tconst float r0x = m[0],  r0y = m[1],  r0z = m[2];\n\tconst float r1x = m[4],  r1y = m[5],  r1z = m[6];\n\tconst float r2x = m[8],  r2y = m[9],  r2z = m[10];\n\tfloat       tx  = m[12], ty  = m[13], tz  = m[14];\n\n\t// Phase 1: t1 = t0 + R0 * (world + pivot)\n\tconst float v0x = world.x + pivot.x;\n\tconst float v0y = world.y + pivot.y;\n\tconst float v0z = world.z + pivot.z;\n\ttx += r0x * v0x + r1x * v0y + r2x * v0z;\n\tty += r0y * v0x + r1y * v0y + r2y * v0z;\n\ttz += r0z * v0x + r1z * v0y + r2z * v0z;\n\n\t// Phase 2: R' = R0 * R(rot) – RotXYZ(rot) on the basis columns\n\tconst float cX = CCalculate::LutCos(rot.x); const float sX = CCalculate::LutSin(rot.x);\n\tconst float cY = CCalculate::LutCos(rot.y); const float sY = CCalculate::LutSin(rot.y);\n\tconst float cZ = CCalculate::LutCos(rot.z); const float sZ = CCalculate::LutSin(rot.z);\n\n\t// Start from current m (R0) and apply X, then Y, then Z exactly like RotXYZ\n\tfloat x0, y0, z0, x1, y1, z1, x2, y2, z2;\n\t// X-axis\n\tx0 =  m[0];  y0 =  m[1];  z0 =  m[2];\n\tx1 =  m[4] * cX + m[8] * sX;   y1 =  m[5] * cX + m[9] * sX;   z1 =  m[6] * cX + m[10] * sX;\n\tx2 =  m[4] * -sX + m[8] * cX;  y2 =  m[5] * -sX + m[9] * cX;  z2 =  m[6] * -sX + m[10] * cX;\n\n\tm[0] = x0; m[1] = y0; m[2] = z0;\n\tm[4] = x1; m[5] = y1; m[6] = z1;\n\tm[8] = x2; m[9] = y2; m[10] = z2;\n\n\t// Y-axis\n\tx0 =  m[0] * cY + m[8] * -sY;  y0 =  m[1] * cY + m[9] * -sY;  z0 =  m[2] * cY + m[10] * -sY;\n\tx1 =  m[4];                    y1 =  m[5];                     z1 =  m[6];\n\tx2 =  m[0] * sY + m[8] * cY;   y2 =  m[1] * sY + m[9] * cY;   z2 =  m[2] * sY + m[10] * cY;\n\n\tm[0] = x0; m[1] = y0; m[2] = z0;\n\tm[4] = x1; m[5] = y1; m[6] = z1;\n\tm[8] = x2; m[9] = y2; m[10] = z2;\n\n\t// Z-axis\n\tx0 =  m[0] * cZ + m[4] * sZ;   y0 =  m[1] * cZ + m[5] * sZ;   z0 =  m[2] * cZ + m[6] * sZ;\n\tx1 =  m[0] * -sZ + m[4] * cZ;  y1 =  m[1] * -sZ + m[5] * cZ;  z1 =  m[2] * -sZ + m[6] * cZ;\n\tx2 =  m[8];                    y2 =  m[9];                     z2 =  m[10];\n\n\tm[0] = x0; m[1] = y0; m[2] = z0;\n\tm[4] = x1; m[5] = y1; m[6] = z1;\n\tm[8] = x2; m[9] = y2; m[10] = z2;\n\n\t// Phase 3: t' = t1 + R' * (-pivot)\n\ttx += m[0] * (-pivot.x) + m[4] * (-pivot.y) + m[8]  * (-pivot.z);\n\tty += m[1] * (-pivot.x) + m[5] * (-pivot.y) + m[9]  * (-pivot.z);\n\ttz += m[2] * (-pivot.x) + m[6] * (-pivot.y) + m[10] * (-pivot.z);\n\tm[12] = tx; m[13] = ty; m[14] = tz; // keep m[15] as is\n}\n\neinfacher sein könnte, dem User das Feintuning zu überlassen\nDer braucht ein klares Spielerlebnis , das da beim gleise Legen irgendwelche Kapriolen passieren soll der nicht handhaben,\nes spielen ja auch viele Kinder oder bei großen Gleisanlagen währ es zu frikelig, der Editor unterstellt dem User ganz klare Edit Regeln die unbedingt von der Software sichergestellt werden müssen so wie bei einem CAD Programm.\n50 Spieler &quot;MMO&quot; ist schon nen hartes Ziel.\nAuf jeden Fall, die können sogar Server mieten und ihr eigenes Terrain (Ressourcen) über Tunnels an das Maingrid anschließen, das läuft dann aber über Linux auf Mietservern, das Thema alleine sprengt schnell den Rahmen da muss man aufpassen, es beginnt in kürze mit der Fahrplan Erstellung und dem Zug-Roster der die Wagongs koppelt(folge Jahr) . Sicher kommen dort Hacker und Einkreiser usw. muss man sehen das sich das selber verwaltet. UDP SSL Kodierter Transfer mal sehen das ist noch ein Weilchen hin. Aber die Kommunikation ist im Prinzip klar, läuft dann zuerst auf ner VM am Nebentisch...\nViel Erfolg damit! Ich glaub da gibts auch sicher einige Foren und Communities für derartige Spiele.\nNa erstmal noch nicht , in dem Zustand interessiert das nur Experten, es gibt ja noch kein Game, in Foren habe ich bis heute noch keinen gehört dem das gefällt  Da bist Du der erste mit dem ich drüber Chatten kann \nD
1283as OpenTTD ist eine andere Liga, da will ich nicht hin, ich mache ein ganz spezielles Railroad wo der User Signale weichen Bahnhöfe auch über Lua -Skript kontrollieren kann, also Stichwort alles ist volldynamisch und generisch.\nEgo-Perspektive (Lokführer)\nGenau ich habe einen Gleistracker der mit der Kamera alle bestehnden Gleise abfährt (Neben der Zugverfolgung) Das jetzt schon ein Wahnsinns ScreenBlanker !\nDanke für deine Aufmerksamkeit\nIch berichte mal immer gerne über solche Sachen \nGruß Karsten\n","timestampISO":"2026-09-24T20:00:02.716Z","user":{"username":"KahnSoft","userslug":"kahnsoft","picture":"","icon:text":"K","icon:bgColor":"#f44336"},"index":6,"cid":19,"parentCid":33,"topic":{"slug":"355496/rail-road-tycoon-mfc-in-action","title":"Rail Road Tycoon MFC in Action"}}]},{"bgColor":"#659981","cid":21,"class":"col-md-3 col-xs-6","color":"#fff","description":"Rund um die VCL (Visual Component Library) und den C++Builder.","descriptionParsed":"<p>Rund um die VCL (Visual Component Library) und den C++Builder.<\/p>\n","disabled":0,"icon":"hidden","imageClass":"cover","link":"","name":"VCL (C++ Builder)","numRecentReplies":1,"order":2,"parentCid":33,"post_count":143578,"slug":"21/vcl-c-builder","topic_count":24027,"isSection":0,"totalPostCount":143578,"totalTopicCount":24027,"tagWhitelist":[],"unread-class":"unread","children":[],"parent":{"bgColor":"#1e8f5c","cid":33,"class":"col-md-3 col-xs-6","color":"#f7f7f7","description":"Fragen zu Funktionen und Abläufen in C++ (C++98, C++03, C++11, C++14, C++17), um zu erfahren was pure virtual bedeutet, wie das mit Templates, STL und Boost geht. Bitte keine Fragen zu Windows&#x2F;Linux-Programmierung hier posten!","descriptionParsed":"<p>Fragen zu Funktionen und Abläufen in C++ (C++98, C++03, C++11, C++14, C++17), um zu erfahren was pure virtual bedeutet, wie das mit Templates, STL und Boost geht. Bitte keine Fragen zu Windows/Linux-Programmierung hier posten!<\/p>\n","disabled":0,"icon":"fa-gittip","imageClass":"cover","link":"","name":"C++ (alle ISO-Standards)","numRecentReplies":1,"order":3,"parentCid":0,"post_count":576440,"slug":"33/c-alle-iso-standards","topic_count":62763,"isSection":0,"totalPostCount":576440,"totalTopicCount":62763,"tagWhitelist":[],"unread-class":"unread"},"posts":[{"pid":2624765,"timestamp":1771254814002,"content":"Nur aus Interesse:\nHat wer diese Version ( C++Builder 12 Community Edition) auf seinem Rechner installiert? Wenn ja, dann könnte die Version mit meinem Win11 nicht kompatibel sein, oder sonst was. Wenn nein, dann ist das Ding wohl fehlerhaft.\n","timestampISO":"2026-02-16T15:13:34.002Z","user":{"username":"RudiMBM","userslug":"rudimbm","picture":"/forum/assets/uploads/profile/36168-profileavatar.png","icon:text":"R","icon:bgColor":"#33691e"},"index":6,"cid":21,"parentCid":33,"topic":{"slug":"355440/c-builder-12-ce-projekt-öffnen-fehlt","title":"C++Builder 12 CE Projekt öffnen fehlt"}}]},{"bgColor":"#26704e","cid":78,"class":"col-md-3 col-xs-6","color":"#fff","description":"C++ mit .NET? Nennt sich C++&#x2F;CLI, oder in der früheren Version Managed C++. Programmierung des .NET-Frameworks mit C++, oder Fragen zu den Erweiterungen von C++&#x2F;CLI mit dem Visual Studio.","descriptionParsed":"<p>C++ mit .NET? Nennt sich C++/CLI, oder in der früheren Version Managed C++. Programmierung des .NET-Frameworks mit C++, oder Fragen zu den Erweiterungen von C++/CLI mit dem Visual Studio.<\/p>\n","disabled":0,"icon":"hidden","imageClass":"cover","link":"","name":"C++&#x2F;CLI mit .NET","numRecentReplies":1,"order":3,"parentCid":33,"post_count":29747,"slug":"78/c-cli-mit-net","topic_count":5156,"isSection":0,"totalPostCount":29747,"totalTopicCount":5156,"tagWhitelist":[],"unread-class":"unread","children":[],"parent":{"bgColor":"#1e8f5c","cid":33,"class":"col-md-3 col-xs-6","color":"#f7f7f7","description":"Fragen zu Funktionen und Abläufen in C++ (C++98, C++03, C++11, C++14, C++17), um zu erfahren was pure virtual bedeutet, wie das mit Templates, STL und Boost geht. Bitte keine Fragen zu Windows&#x2F;Linux-Programmierung hier posten!","descriptionParsed":"<p>Fragen zu Funktionen und Abläufen in C++ (C++98, C++03, C++11, C++14, C++17), um zu erfahren was pure virtual bedeutet, wie das mit Templates, STL und Boost geht. Bitte keine Fragen zu Windows/Linux-Programmierung hier posten!<\/p>\n","disabled":0,"icon":"fa-gittip","imageClass":"cover","link":"","name":"C++ (alle ISO-Standards)","numRecentReplies":1,"order":3,"parentCid":0,"post_count":576440,"slug":"33/c-alle-iso-standards","topic_count":62763,"isSection":0,"totalPostCount":576440,"totalTopicCount":62763,"tagWhitelist":[],"unread-class":"unread"},"posts":[{"pid":2620723,"timestamp":1709477984455,"content":"@znieh99\num mit Niklaus Wirth (* 15. Februar 1934 in Winterthur;
1283 † 1. Januar 2024 in Zürich) zu antworten: Wahlfreier Zugriff (Random Access) findet nicht auf Dateiebene sondern im Hauptspeicher statt. Denn: Dateien sind Sequenzen, sie werden sequentiell gelesen und sequentiell geschrieben.\nDas heißt: Lese den Dateiinhalt auf eine zweckmäßige Datenstruktur (Array, Liste, Map o.ä) und bearbeite diese. Anschließend schreibe diese Daten zurück in die Sequenz (Serialize). Die Frage ist also, wie man abstrakte Datentypen in Sequenzen serialisiert und umgekehrt. Und aus OOP-Sicht könnte man die Daten im RAM als Objekte auffassen die dafür ihre eigenen Methoden bescheiben.\nMFG\n","timestampISO":"2024-03-03T14:59:44.455Z","user":{"username":"_ro_ro","userslug":"_ro_ro","picture":"","icon:text":"_","icon:bgColor":"#e65100"},"index":7,"cid":78,"parentCid":33,"topic":{"slug":"354569/wie-kann-ich-daten-in-einer-datei-teilweise-ändern","title":"Wie kann ich Daten in einer Datei teilweise ändern"}}]},{"bgColor":"#21a366","cid":41,"class":"col-md-3 col-xs-6","color":"#333","description":"Alternative GUI-Libs werden immer geläufiger, diese Rubrik bietet Qt, gtkmm, GTK+, wxWidgets und   Co. eine Heimat.","descriptionParsed":"<p>Alternative GUI-Libs werden immer geläufiger, diese Rubrik bietet Qt, gtkmm, GTK+, wxWidgets und   Co. eine Heimat.<\/p>\n","disabled":0,"icon":"hidden","imageClass":"cover","link":"","name":"Andere GUIs - Qt, GTK+, wxWidgets","numRecentReplies":1,"order":4,"parentCid":33,"post_count":25495,"slug":"41/andere-guis-qt-gtk-wxwidgets","topic_count":4717,"isSection":0,"totalPostCount":25495,"totalTopicCount":4717,"tagWhitelist":[],"unread-class":"unread","children":[],"parent":{"bgColor":"#1e8f5c","cid":33,"class":"col-md-3 col-xs-6","color":"#f7f7f7","description":"Fragen zu Funktionen und Abläufen in C++ (C++98, C++03, C++11, C++14, C++17), um zu erfahren was pure virtual bedeutet, wie das mit Templates, STL und Boost geht. Bitte keine Fragen zu Windows&#x2F;Linux-Programmierung hier posten!","descriptionParsed":"<p>Fragen zu Funktionen und Abläufen in C++ (C++98, C++03, C++11, C++14, C++17), um zu erfahren was pure virtual bedeutet, wie das mit Templates, STL und Boost geht. Bitte keine Fragen zu Windows/Linux-Programmierung hier posten!<\/p>\n","disabled":0,"icon":"fa-gittip","imageClass":"cover","link":"","name":"C++ (alle ISO-Standards)","numRecentReplies":1,"order":3,"parentCid":0,"post_count":576440,"slug":"33/c-alle-iso-standards","topic_count":62763,"isSection":0,"totalPostCount":576440,"totalTopicCount":62763,"tagWhitelist":[],"unread-class":"unread"},"posts":[{"pid":2624065,"timestamp":1754029631123,"content":"Ich arbeite gerade an DirectX und nutze zum ersten mal die DirectXMath Funktionen. Die SIMD Unterstützung ist neu für mich. Das Flag _XM_SSE_INTRINSICS_ ist entsprechend gesetzt.\nVon daher wollte ich fragen ob der folgende Code so ok ist:\nfloat GetDistance2D(const DirectX::XMVECTOR&amp; P1, const DirectX::XMVECTOR&amp; P2)\n{\n    DirectX::XMVECTOR delta = DirectX::XMVectorSubtract(P1, P2);\n    DirectX::XMVECTOR length = DirectX::XMVector2Length(delta);\n\n    return DirectX::XMVectorGetX(length);\n}\n\nMein gedankliches Problem: DirectX::XMVECTOR ist ein 4D Vektor, aber ich brauche nur die 2D Distanz. Wäre also der folgende Code schneller?\nfloat GetDistance2D(const DirectX::XMVECTOR&amp; P1, const DirectX::XMVECTOR&amp; P2)\n{\n    float P1x, P1y, P1w;\n    float P2x, P2y, P2w;\n\n    // Bestimme XY von P1\n    P1w = DirectX::XMVectorGetW(P1);\n    if (P1w != 0.0f &amp;&amp; P1w != 1.0f)\n    {\n        P1x = DirectX::XMVectorGetX(P1) / P1w;\n        P1y = DirectX::XMVectorGetY(P1) / P1w;\n    }\n    else\n    {\n        P1x = DirectX::XMVectorGetX(P1);\n        P1y = DirectX::XMVectorGetY(P1);\n    }\n    // Bestimme XY von P2\n    P2w = DirectX::XMVectorGetW(P2);\n    if (P2w != 0.0f &amp;&amp; P2w != 1.0f)\n    {\n        P2x = DirectX::XMVectorGetX(P2) / P2w;\n        P2y = DirectX::XMVectorGetY(P2) / P2w;\n    }\n    else\n    {\n        P2x = DirectX::XMVectorGetX(P2);\n        P2y = DirectX::XMVectorGetY(P2);\n    }\n    // Berechne nun den Abstand\n    float DiffX = P1x - P2x;\n    float DiffY = P1y - P2y;\n\n    return sqrt(DiffX * DiffX + DiffY * DiffY);\n}\n\n","timestampISO":"2025-08-01T06:27:11.123Z","user":{"username":"Quiche Lorraine","userslug":"quiche-lorraine","picture":"/forum/assets/uploads/profile/35432-profileavatar.png","icon:text":"Q","icon:bgColor":"#ff5722"},"index":1,"cid":41,"parentCid":33,"topic":{"slug":"355336/directxmath-einstieg-verständnisfrage","t
1283itle":"DirectXMath Einstieg -&gt; Verständnisfrage"}}]}],"posts":[{"pid":2625246,"timestamp":1790280002716,"content":"@Finnegan sagte in Rail Road Tycoon MFC in Action:\n\nway E\n\nHey Finnegan,\nDas Projekt ist auch auf GitHub, https://github.com/KahnSoft/FlexxRail\nHab da nicht ganz die Muße, mir den Code anzusehen\nJa ist auch nur ein Fetzen, zeigt aber den Vorgang der Chunk -Generierung ohne Cracks untereinander, da spielt ein gewisses Micro Overlapping eine rolle, das am ende aber kein Brot frisst (+2 auf den sizes der Chunks) Es wird sonnst Abstrus Rechen lastig wenn man da keine Tricks anwendet, also alles ist immer ein Kompromiss zwischen best of und Perform. Wenn man da Hunderte Loks mit Anhängern anzeigt, braucht man jeden Rechenquant, solange kein Gameplay statt findet, muss ich immer 1Khz Framerate erreichen, sonnst ist es später vorbei, also minimalste Operationen mit bestmöglichen Ergebnis.\ndie Berglandschaft in dem Video ist nicht unbedingt eine Heightmap-Geometrie sondern ein eventuell generischeres 3D-Modell\nGenau es ist keine Highmap es ist alles dynamisch mit der Perlin Noise erzeugtes Grid- dessen Höhenwerte vom Shader mit Texpixeln im shader Texturmischer belegt werden,  ich erzeuge damit riesige Karten mit Kantenlängen von bis zu 1 Million Dreiecke Seitenlänge was riesig ist, die Loks fahren mit rund 145Kmh alles bereist authentisch proportional, und ich kann die Kamera auf eine Fahrende Lok aufschalten und diese verfolgen, die benötigt in diesem Affentempo rund 5 Minuten um eine Seitenlänge zu passieren. Eine Highmap dieser Größe sprengt den Speicherrahmen , es ist auch nicht gerade günstig eine Textur zu haben die 10000 Pixel Breit und Hoch ist. Man nennt das mit vielen Highmaps dann Content-Streaming DirectX SDK macht das vor, aber ich muss wie gesagt insgesamt die Performance erhalten ,  es können später tausende Objekte mit den Chunks und dem LodSystem so veraltet werden. Da bin ich auch froh drüber es ohne ContentStreaming und Ohne HighMaps gemacht zu haben, zumal nach der Highmap dann nochmal selbige ColorMap als Textur benötigt wird, alles wird also Dynamisch zur Laufzeit erzeugt, die Qualität ist natürlich nicht die einer ColorMap, aber sie ist apokalyptisch groß, es wird also keine 3D -Lok Simulation wo jedes Gauge im Kesselhaus zu sehen ist, das zerbricht die Welt der unendlichen Weiten , das wird der große Vorteil gegenüber statischer Körperwelten. Also Aktienhandel Resourcenabbau alles Basiert auf Primitives, in einer erschlagenden Dimension.\nNur die Ränder der &quot;Szene&quot;,\nGenau keine Cracks in der Szene (NoGo) lediglich die Ränder haben eine Treppensignatur, aber die könnte ich wegrechnen ist aber unnötig out of SkyBox\nParametrischen Kurven (Splines) meist eine Variable &quot;Geschwindigkeit&quot; haben.\nDa die Lok die Spline kennt (also die errechnet die selbst , es existieren real nur Kontrollpunkte) erzeugt sie für die Kurvigkeit eine Speed-Drossel die wirkt für Aufstieg bremsend für Abstieg Beschleunigend und für rechts links Radien Bremsend.\nvoid CSplineObjFollow::CalcSpeed()\n{\n  const int dirSz = (int)m_DirN.size();\n  if (m_SplineIdx &lt; 0 || m_SplineIdx &gt;= dirSz)\n  {\n    m_ConsecUphill = 0;\n    m_ConsecDownhill = 0;\n    m_ConsecCurve = 0;\n    m_UphillFlt *= 0.9f;\n    m_DownhillFlt *= 0.9f;\n    m_CurveFlt *= 0.9f;\n    m_LastSpeedFactor = 1.0f;\n    return;\n  }\n\n  // Calculate Slope directly\n  const float s = m_DirN[m_SplineIdx].z;\n\n  // Calculate Curvature directly\n  float avgCurv = 0.0f;\n  int curvSamples = 0;\n  const int splineSz = (int)m_Spline.size();\n\n  if (splineSz &gt;= 3)\n  {\n      const int maxCenter = splineSz - 2;\n      CVertex* splinePtr = m_Spline.data();\n      int si, center;\n      float c;\n\n      for (si = 0; si &lt; 3; ++si)\n      {\n          center = m_SplineIdx + si;\n          if (center &lt; 1) center = 1;\n          else if (center &gt; maxCenter) center = maxCenter;\n\n          c = Spline::LocalCurvature(splinePtr[center - 1], splinePtr[center], splinePtr[center + 1]);\n          if (c &gt; 0.0f) { avgCurv += c; ++curvSamples; }\n      }\n\n      if (curvSamples) avgCurv /= (float)curvSamples;\n  }\n\n  const float absS = fabsf(s);\n  float factor = 1.0f;\n\n  if (absS &gt; SFF_EFFECT_THR)\n  {\n    float eff = absS - SFF_EFFECT_THR;\n    if (s &gt; 0.0f)                                                          // Bergauf: langsamer\n    {\n      if (eff &gt; SFF_MAX_UP_EFF) eff = SFF_MAX_UP_EFF;\n      factor -= eff * m_UphillFlt;\n    }\n    else                                                                   // Bergab: schneller\n    {\n      if (eff &gt; 0.10f) eff = 0.10f;\n      factor += eff * m_DownhillFlt;\n    }\n  }\n\n  if (avgCurv &gt; 1e-5f) ++m_ConsecCurve; else if (m_ConsecCurve &gt; 0) --m_ConsecCurve;\n\n  const float invUp = 1.0f / (float)SFF_CONSEC_FULL_UP;\n  const float uphillTarget = (m_ConsecUphill &gt; 0) ? (m_ConsecUphill * invUp) : 0.0f;\n  const float downhillTarget = (m_ConsecDownhill &gt; 0) ? (m_ConsecDownhill * invUp) : 0.0f;\n  const float curveTarget = (avgCurv &gt; 0.0f) ? (avgCurv / (avgCurv + 0.003f) * 1.5f) : 0.0f;\n\n  m_UphillFlt += (uphillTarget - m_UphillFlt) * ((uphillTarget &gt; m_UphillFlt) ? SFF_RISE : SFF_DECAY);\n  m_CurveFlt += (curveTarget - m_CurveFlt) * ((curveTarget &gt; m_CurveFlt) ? SFF_RISE : SFF_DECAY);\n  m_DownhillFlt += (downhillTarget - m_DownhillFlt) * ((downhillTarget &gt; m_DownhillFlt) ? SFF_RISE : SFF_DECAY);\n\n  if (m_CurveFlt &gt; 0.0f)                                                   // Kurven: langsamer\n  {\n    float tmp = 1.0f - SFF_CURVE_MAX_RED * (m_CurveFlt * (1.0f + 0.65f * m_CurveFlt) * (1.0f + 0.75f * m_
1283CurveFlt));\n    if (tmp &lt; 0.1f) tmp = 0.1f;\n    factor *= tmp;\n  }\n\n  if (factor &lt; 0.25f) factor = 0.25f;\n  else if (factor &gt; 1.5f) factor = 1.5f;\n\n  const float smooth = (factor &lt; m_LastSpeedFactor) ? SFF_SPEED_SMOOTH_DOWN : (SFF_SPEED_SMOOTH_UP / (1.0f + m_Speed * SFF_SPD_SMOOTH_SCL));\n  m_LastSpeedFactor += (factor - m_LastSpeedFactor) * smooth;\n}\n\nvoid CSplineObjFollow::CalcSpeedA()\n{\n  float factor = 1.0f;\n  const int dirSz = (int)m_DirN.size();\n\n  if (dirSz &gt;= 2 &amp;&amp; m_SplineIdx &gt;= 0)\n  {\n    float maxProxy = 0.0f;\n    const CVertex *dirPtr = m_DirN.data();\n\n    for (int i = 0; i &lt; 3; ++i)\n    {\n      int pidx = m_SplineIdx + i;\n      if (pidx &lt; 1) pidx = 1;\n      else if (pidx &gt;= dirSz) pidx = dirSz - 1;\n\n      int p0 = (pidx &gt; 0) ? pidx - 1 : 0;\n      float d = dirPtr[p0].Dot(dirPtr[pidx]);\n      if (d &gt; 1.0f) d = 1.0f;\n      else if (d &lt; -1.0f) d = -1.0f;\n\n      float proxy = 1.0f - d;\n      if (proxy &gt; maxProxy) maxProxy = proxy;\n    }\n\n    const float curveEffect = (maxProxy &gt; 0.0f) ? (maxProxy / (maxProxy + 0.001f)) : 0.0f;\n    m_CurveFlt += (curveEffect - m_CurveFlt) * ((curveEffect &gt; m_CurveFlt) ? SFF_RISE : SFF_DECAY);\n    factor = 1.0f - SFF_CURVE_MAX_RED * (curveEffect * (1.0f + 0.75f * m_
1283CurveFlt));\n  }\n\n  if (factor &lt; 0.15f) factor = 0.15f;\n  else if (factor &gt; 1.5f) factor = 1.5f;\n\n  float alpha = 0.20f + 0.55f * (1.0f - factor);\n  if (alpha &gt; 1.0f) alpha = 1.0f;\n  if (factor &lt; m_LastSpeedFactor) alpha = alpha * 0.9f + 0.5f * (1.0f - alpha);\n\n  m_LastSpeedFactor += (factor - m_LastSpeedFactor) * alpha;\n}\n\nDiese Verfolgung von Tracks wird also in separaten Threads berechnet, und für jede Lok durchlaufen, da gibt es nicht die geringsten Probleme mit der Render Geschwindigkeit , es wird also kein Normal benötigt um die Geschwindigkeit auf den Dynamischen Tracks zu erhalten, die allerdings über normal vektoren verfügen, jedoch nie von der Mechanik abgefragt werden, die Tracks haben auch eine Beschreibung über den sog. TrackFragmentGenerator:\n/*\n==========================================================\nTrackFragment Eigenschaften &amp; Geometrie-Regelwerk\n==========================================================\n\n1) Grundstruktur (RNA1):\n   - Ein TrackFragment besteht aus mehreren Einzelteilen: Balast, Slicer (Schienen), Sleeper (Schwellen).\n   - Die Geometrie wird entlang einer Eingangsspline (VertexLst) erzeugt und verteilt.\n   - Jeder Einzelteiltyp hat eigene Parameter und Farben.\n\n2) Balast (RNA1):\n   - Wird als U-Profil ohne Boden generiert.\n   - Besteht aus Seitenwänden und Dach, keine Unterseite.\n   - Die Breite und Höhe sind abhängig vom Maßstab (scale).\n   - Die Balast-Spline wird mit niedriger Dichte (Subsampling) erzeugt.\n   - Speicherbedarf steigt mit Dichte und Länge der Spline.\n\n3) Slicer (Schienen) (RNA1):\n   - Werden als U-Profile ohne Boden generiert.\n   - Bestehen aus Seitenwänden und Dach, keine Unterseite.\n   - Slicer sind schmaler und höher als der Balast.\n   - Es werden zwei Slicer erzeugt: linke und rechte Schiene, jeweils entlang der Spline versetzt.\n   - Slicer erhalten eine eigene Farbe für Seiten und Dach.\n   - Subsampling reduziert Speicher und Rechenlast.\n\n4) Sleeper (Schwellen) (RNA1):\n   - Werden als Quader erzeugt, keine U-Profile.\n   - Liegen quer zur Spline und verbinden die beiden Slicer.\n   - Die Platzierung erfolgt gleichmäßig entlang der Spline, am Anfang, Ende und dazwischen.\n   - Sleeper erhalten eigene Farben für Seiten und Oberseite.\n   - Anzahl und Abstand beeinflussen die Komplexität.\n\n5) Geometrie-Erzeugung (RNA1):\n   - Die Methode GenerateVbo erzeugt die Einzelteile entlang der Spline.\n   - Für Balast und Slicer wird die Spline mit unterschiedlichen Schrittweiten abgetastet (Subsampling).\n   - Die Geometrie wird als Vertex-, Normal-, Color- und Index-Arrays für das VBO erzeugt.\n   - Datenfluss: Spline -&gt; Sampling -&gt; Einzelteil -&gt; VBO.\n\n6) Farben und Materialien (RNA1):\n   - Jede Komponente (Balast, Slicer, Sleeper) erhält eigene Farben für Seiten und Dach/Oberseite.\n   - Die Farben werden beim Erzeugen der Vertices zugewiesen.\n   - Farbwechsel im Code beachten.\n\n7) VBO-Handling (RNA1):\n   - Die erzeugten Geometrien werden in einem VBOSet gespeichert.\n   - Nach der Erzeugung wird das VBO für die Darstellung vorbereitet.\n   - Speicherbedarf und Performance hängen von der Anzahl der Vertices und Indices ab.\n\n8) Besonderheiten (RNA1):\n   - Die Geometrie ist so ausgelegt, dass keine Bodenflächen für U-Profile entstehen.\n   - Die Verteilung und Ausrichtung der Einzelteile erfolgt dynamisch entlang der Eingangsspline.\n   - Fehlerquellen: Indizierung, Subsampling, falsche Parameter.\n\n9) Komplexitätsfaktoren (KI-relevant):\n   - Anzahl und Dichte der Einzelteile (Balast, Slicer, Sleeper).\n   - Länge und Form der Eingangsspline.\n   - Subsampling-Parameter und Profilgrößen.\n   - VBO-Speicherbedarf und Render-Performance.\n   - Korrekte Indizierung und Farbzuteilung.\n   - Robustheit gegen fehlerhafte Eingabedaten.\n\n10) Speicherverwaltung und Vektorzugriffe (RNA1):\n   - Alle Geometrie-Daten werden in std::vector gespeichert.\n   - Jeder push/remove/clear/erase-Aufruf ruft automatisch die Destruktoren der enthaltenen Objekte auf.\n   - Dadurch werden Ressourcen immer korrekt freigegeben.\n   - Speicherlecks sind ausgeschlossen, solange keine rohen Zeiger verwendet werden.\n\n11) LOD-Rendering für entfernte Fragmente (RNA1):\n   - Ab einer Entfernung von TRACK_LOD_DIST werden weniger Indices im VBO gezeichnet.\n   - Ein visueller Hinweis (z.B. &quot;LOD aktiv&quot;) wird rechtsbündig am Fragment angezeigt.\n   - Die LOD-Distanz ist als TRACK_LOD_DIST im Code definiert.\n   \n   LOD-Priorität (VBO-Reihenfolge, Index 0 = höchste Priorität):\n   +-------+------------------+---------------+---------------------------+\n   | Phase | Komponente       | LOD-Priorität | Beschreibung              |\n   +-------+------------------+---------------+---------------------------+\n   |   1   | Gauges           | Höchste       | Lichttafel (4 Lichter)    |\n   |   1   | Dipper           | Höchste       | Signalflügel              |\n   |   2   | Switch-Cube      | Hoch          | Weichen-Hitbox            |\n   |   3   | Terminal         | Hoch          | Bahnsteig-Geometrie       |\n   |   4   | Signal-Mast      | Mittel        | Stange + Sockel           |\n   |   5   | Prellbock        | Mittel        | Buffer Stop               |\n   |   6   | Ballast          | Niedrig       | Schotter (viele Faces)    |\n   |   6   | Slicer           | Niedrig       | Schienen (viele Faces)    |\n   |   6   | Sleeper          | Niedrig       | Schwellen (viele Faces)   |\n   +-------+------------------+---------------+---------------------------+\n   \n   Bei LOD-Reduktion werden zuerst Sleeper/Slicer/Ballast weggelassen,\
1283n   Gauges und Dipper bleiben bis zuletzt sichtbar.\n\n12) Switch-Cube für Weichen (RNA2):\n   - Wird nur bei TYPE_SWITCH_TRK erzeugt.\n   - Besteht aus einem Würfel (Cube) und einem Sockel (Pyramiden-Stumpf) neben dem Gleis am Ende der Spline.\n   - Position: Neben dem Balast in Fahrtrichtung, versetzt um die halbe Balast-Breite plus zusätzlichen Abstand.\n   - Größe: Würfel hat scale * 1.6f Größe, Sockel ist doppelt so breit.\n   - Farben: Würfel in Slicer-Farben (Grün=Open, Rot=Closed), Sockel in Balast-Farben.\n   - Zweck: Visuelle Darstellung von Weichen-Switches mit Statusanzeige (Open/Closed).\n   - Bounding Box: Separate m_SwitchBBoxMin/Max für Kollision oder Selektion.\n\n13) Signal-Mast für Weichen &amp; Strecken (RNA3):\n   - Wird bei TYPE_SWITCH_TRK (automatisch) oder via SnapIn (manuell) erzeugt.\n   - Besteht aus mehreren Komponenten:\n     a) Sockel: Pyramiden-Stumpf auf Terrain-Höhe\n     b) Mast: Zwei vertikale Streben (Leiter-Stil) mit Sprossen\n     c) Kopfstück: Horizontaler Balken am oberen Ende\n     d) Ausleger: Horizontale Stäbe zur Seitenstabilisierung\n     e) Dipper: Beweglicher Signal-Flügel (Formsignal)\n     f) Gauge: Lichttafel mit 4 Signallichtern (Hp0/Hp1/Hp2)\n   - Position:\n     * Weichen: Automatisch in der Mitte der Spline.\n     * Strecken: An definierter SnapIn-Position (dotIdx).\n   - Dipper-Zustände:\n     * TYPE_SIGNAL_OPEN gesetzt: Dipper horizontal (Hp0 = Halt)\n     * TYPE_SIGNAL_OPEN nicht gesetzt: Dipper nach unten (Hp1 = Fahrt frei)\n   - Farben: Mast in Balast-Farben, Dipper rot mit weißer Füllung und Ring.\n   - Bounding Box: Separate m_SignalBoxes für Klick-Erkennung (umschließt gesamten Mast).\n   - Debug-Anzeige: Weiße Box, roter Text &quot;Hp0&quot;/&quot;Hp1&quot;.\n   - Lok-Steuerung: Signal-Status wird in SnapIn.flags gespeichert.\n\n14) Prellbock / Buffer Stop (RNA4):\n   - Wird automatisch bei TYPE_PILLER_TRK erzeugt (Track mit offenem Ende).\n   - Erkennung: forwardFragmentId == -1 ODER backwardFragmentId == -1.\n   - Position: Am Gleisende, versetzt um 3 * SLEEPER_PITCH nach hinten.\n   - Struktur:\n     a) Gleis-Extension: Echtes Gleis (Balast/Slicer/Sleeper) vom Ende bis zum Prellbock.\n     b) Schraege Stuetzen: 2x 45-Grad Hypotenuse (links/rechts auf Schienen).\n     c) Vertikale Kateten: 2x senkrechte Pfosten hinter den Stuetzen.\n     d) Querbalken oben: Horizontaler Balken zwischen den Kateten-Spitzen.\n     e) Querbalken unten: Horizontaler Balken am Fuss der Stuetzen.\n   - Doppelgleis: 2 separate Prellboecke mit Gleisabstand versetzt.\n   - Verkehrsvertrag: Am Prellbock dreht nur die Fahrtrichtung der Lok. Ihre\n     m_TrackSide bleibt unveraendert; der seitliche Render-Offset wird gespiegelt.\n     Bei einem Doppelgleis-Hostwechsel wird zusaetzlich die Weltposition fuer\n     die Seitenkontinuitaet ausgewertet, damit Weichen keinen Spurwechsel erzeugen.\n   - Farben: Stuetzen grau, Querbalken in Sleeper-Farben.\n   - Rekursionsschutz: TYPE_PILLER_TRK wird fuer Extension-Spline entfernt.\n\n15) Terminal / Bahnsteig (RNA5):\n   - Länge basiert auf Zuglänge: TERMINAL_WAGON_LEN × TERMINAL_MAX_WAGONS = 15000 units\n   - 1 Waggon/Lok = 1500 units, Max 10 Waggons am Bahnsteig\n   - Z-Ebene: Einheitliche Höhe (Mittelwert aller Dots) - keine Wellen!\n   - Zwei Signale (A + B) an den Enden für Face-to-Face Steuerung.\n   - Dynamische Verkürzung wenn Track zu kurz ist.\n\n16) Verkehr &amp; Fahrplaner (RNA6):\n   - Die Basis-Verkehrslogik ist aktiv: physische Doppelgleis-Seiten,\n     Bremsen und Disaster-Erkennung laufen in GLSceneTraffic.\n   - Ein globaler Fahrplaner/Scheduler über dieser Basis bleibt geplant.\n   - Er nutzt RNA1-5 (Gleise, Weichen, Signale, Prellboecke, Terminals)\n     fuer Zeitsteuerung und Automatisierung von Weichen/Signalen.\n*/\n\n\nnicht in jedem Frame machen. Die Geometrie der Lok und Waggons bedingt ja einen minimalen Krümmungsradius.\nTatsächlich wird es sogar öfters berechnet als pro jedem Frame, das geht mit bis zu 20 tausend Iterationen also 20Khz\nin den Threads, die Loks fahren seidig und extrem Pixel genau auf den Gleiskörpern.\nDurch die Translationen für die Lok -Mesh Körper werden diese exact an der Spline geführt dazu wird für die Loks eine Pivot-Translation verwendet:\nvoid CGLmatrix::TranslatePivotXYZTrack(const CVertex&amp; world, CVertex&amp; pivot, const CVertex&amp; forward, const CVertex&amp; right, const CVertex&amp; up)\n{\n\tfloat* m = m_m0;\n\n\t// Snapshot original orientation (R0) and translation (t0)\n\tconst float r0x = m[0],  r0y = m[1],  r0z = m[2];\n\tconst float r1x = m[4],  r1y = m[5],  r1z = m[6];\n\tconst float r2x = m[8],  r2y = m[9],  r2z = m[10];\n\tfloat       tx  = m[12], ty  = m[13], tz  = m[14];\n\n\t// Phase 1: t1 = t0 + R0 * (world + pivot)\n\tconst float v0x = world.x + pivot.x;\n\tconst float v0y = world.y + pivot.y;\n\tconst float v0z = world.z + pivot.z;\n\ttx += r0x * v0x + r1x * v0y + r2x * v0z;\n\tty += r0y * v0x + r1y * v0y + r2y * v0z;\n\ttz += r0z * v0x + r1z * v0y + r2z * v0z;\n\n\t// Phase 2: DIREKTE Matrix-Orientierung aus Spline-Basis (statt Euler-Rotation)\n\t// R' = R0 * SplineBasis (Forward, Right, Up direkt verwenden)\n\tm[0] = r0x * forward.x + r1x * forward.y + r2x * forward.z;\n\tm[1] = r0y * forward.x + r1y * forward.y + r2y * forward.z;\n\tm[2] = r0z * forward.x + r1z * forward.y + r2z * forward.z;\n\t\n\tm[4] = r0x * right.x + r1x * right.y + r2x * right.z;\n\tm[5] = r0y * right.x + r1y * right.y + r2y * right.z;\n\tm[6] = r0z * right.x + r1z * right.y + r2z * right.z;\n\t\n\tm[8] = r0x * up.x + r1x * up.y + r2x * up.z;\n\tm[9] = r0y * up.x + r1y * up.y + r2y * up.z;\n\tm[10] = r0z * up.x + r1z * up.y + r2z * up.z;\n\n\t// Phase 3: t' = t1 + R' * (-pivot)\n\ttx += m[0] * (-pivot.x) + m[4] * (-pivot.y) + m[8]  * (-pivot.z);\n\tty += m[1] * (-pivot.x) + m[5] * (-pivot.y) + m[9]  * (-pivot.z);\n\ttz += m[2] * (-pivot.x) + m[6] * (-pivot.y) + m[10] * (-pivot.z);\n\tm[12] = tx; m[13] = ty; m[14] = tz; // keep m[15] as is\n}\n\n\nUnd für normale nicht dem Track folgender Objekte eine Pivot normale Translation (Beides Teil der GL Engine wo jede Matrix wenn sie fertig im Speicher liegt nur einmal per Frame an GL gesendet wird was zu wahnsinnigen Ablaufraten führt:\nvoid CGLmatrix::TranslatePivotXYZ(const CVertex&amp; world,  CVertex&amp; pivot, const CVertex&amp; rot)\n{\n\tfloat* m = m_m0;\n\n\t// Snapshot original orientation (R0) and translation (t0)\n\tconst float r0x = m[0],  r0y = m[1],  r0z = m[2];\n\tconst float r1x = m[4],  r1y = m[5],  r1z = m[6];\n\tconst float r2x = m[8],  r2y = m[9],  r2z = m[10];\n\tfloat       tx  = m[12], ty  = m[13], tz  = m[14];\n\n\t// Phase 1: t1 = t0 + R0 * (world + pivot)\n\tconst float v0x = world.x + pivot.x;\n\tconst float v0y = world.y + pivot.y;\n\tconst float v0z = world.z + pivot.z;\n\ttx += r0x * v0x + r1x * v0y + r2x * v0z;\n\tty += r0y * v0x + r1y * v0y + r2y * v0z;\n\ttz += r0z * v0x + r1z * v0y + r2z * v0z;\n\n\t// Phase 2: R' = R0 * R(rot) – RotXYZ(rot) on the basis columns\n\tconst float cX = CCalculate::LutCos(rot.x); const float sX = CCalculate::LutSin(rot.x);\n\tconst float cY = CCalculate::LutCos(rot.y); const float sY = CCalculate::LutSin(rot.y);\n\tconst float cZ = CCalculate::LutCos(rot.z); const float sZ = CCalculate::LutSin(rot.z);\n\n\t// Start from current m (R0) and apply X, then Y, then Z exactly like RotXYZ\n\tfloat x0, y0, z0, x1, y1, z1, x2, y2, z2;\n\t// X-axis\n\tx0 =  m[0];  y0 =  m[1];  z0 =  m[2];\n\tx1 =  m[4] * cX + m[8] * sX;   y1 =  m[5] * cX + m[9] * sX;   z1 =  m[6] * cX + m[10] * sX;\n\tx2 =  m[4] * -sX + m[8] * cX;  y2 =  m[5] * -sX + m[9] * cX;  z2 =  m[6] * -sX + m[10] * cX;\n\n\tm[0] = x0; m[1] = y0; m[2] = z0;\n\tm[4] = x1; m[5] = y1; m[6] = z1;\n\tm[8] = x2; m[9] = y2; m[10] = z2;\n\n\t// Y-axis\n\tx0 =  m[0] * cY + m[8] * -sY;  y0 =  m[1] * cY + m[9] * -sY;  z0 =  m[2] * cY + m[10] * -sY;\n\tx1 =  m[4];                    y1 =  m[5];                     z1 =  m[6];\n\tx2 =  m[0] * sY + m[8] * cY;   y2 =  m[1] * sY + m[9] * cY;   z2 =  m[2] * sY + m[10] * cY;\n\n\tm[0] = x0; m[1] = y0; m[2] = z0;\n\tm[4] = x1; m[5] = y1; m[6] = z1;\n\tm[8] = x2; m[9] = y2; m[10] = z2;\n\n\t// Z-axis\n\tx0 =  m[0] * cZ + m[4] * sZ;   y0 =  m[1] * cZ + m[5] * sZ;   z0 =  m[2] * cZ + m[6] * sZ;\n\tx1 =  m[0] * -sZ + m[4] * cZ;  y1 =  m[1] * -sZ + m[5] * cZ;  z1 =  m[2] * -sZ + m[6] * cZ;\n\tx2 =  m[8];                    y2 =  m[9];                     z2 =  m[10];\n\n\tm[0] = x0; m[1] = y0; m[2] = z0;\n\tm[4] = x1; m[5] = y1; m[6] = z1;\n\tm[8] = x2; m[9] = y2; m[10] = z2;\n\n\t// Phase 3: t' = t1 + R' * (-pivot)\n\ttx += m[0] * (-pivot.x) + m[4] * (-pivot.y) + m[8]  * (-pivot.z);\n\tty += m[1] * (-pivot.x) + m[5] * (-pivot.y) + m[9]  * (-pivot.z);\n\ttz += m[2] * (-pivot.x) + m[6] * (-pivot.y) + m[10] * (-pivot.z);\n\tm[12] = tx; m[13] = ty; m[14] = tz; // keep m[15] as is\n}\n\neinfacher sein könnte, dem User das Feintuning zu überlassen\nDer braucht ein klares Spielerlebnis , das da beim gleise Legen irgendwelche Kapriolen passieren soll der nicht handhaben,\nes spielen ja auch viele Kinder oder bei großen Gleisanlagen währ es zu frikelig, der Editor unterstellt dem User ganz klare Edit Regeln die unbedingt von der Software sichergestellt werden müssen so wie bei einem CAD Programm.\n50 Spieler &quot;MMO&quot; ist schon nen hartes Ziel.\nAuf jeden Fall, die können sogar Server mieten und ihr eigenes Terrain (Ressourcen) über Tunnels an das Maingrid anschließen, das läuft dann aber über Linux auf Mietservern, das Thema alleine sprengt schnell den Rahmen da muss man aufpassen, es beginnt in kürze mit der Fahrplan Erstellung und dem Zug-Roster der die Wagongs koppelt(folge Jahr) . Sicher kommen dort Hacker und Einkreiser usw. muss man sehen das sich das selber verwaltet. UDP SSL Kodierter Transfer mal sehen das ist noch ein Weilchen hin. Aber die Kommunikation ist im Prinzip klar, läuft dann zuerst auf ner VM am Nebentisch...\nViel Erfolg damit! Ich glaub da gibts auch sicher einige Foren und Communities für derartige Spiele.\nNa erstmal noch nicht , in dem Zustand interessiert das nur Experten, es gibt ja noch kein Game, in Foren habe ich bis heute noch keinen gehört dem das gefällt  Da bist Du der erste mit dem ich drüber Chatten kann \nD
1283as OpenTTD ist eine andere Liga, da will ich nicht hin, ich mache ein ganz spezielles Railroad wo der User Signale weichen Bahnhöfe auch über Lua -Skript kontrollieren kann, also Stichwort alles ist volldynamisch und generisch.\nEgo-Perspektive (Lokführer)\nGenau ich habe einen Gleistracker der mit der Kamera alle bestehnden Gleise abfährt (Neben der Zugverfolgung) Das jetzt schon ein Wahnsinns ScreenBlanker !\nDanke für deine Aufmerksamkeit\nIch berichte mal immer gerne über solche Sachen \nGruß Karsten\n","timestampISO":"2026-09-24T20:00:02.716Z","user":{"username":"KahnSoft","userslug":"kahnsoft","picture":"","icon:text":"K","icon:bgColor":"#f44336"},"index":6,"cid":19,"parentCid":33,"topic":{"slug":"355496/rail-road-tycoon-mfc-in-action","title":"Rail Road Tycoon MFC in Action"}}],"teaser":{"url":"/forum/post/2625246","timestampISO":"2026-09-24T20:00:02.716Z","pid":2625246,"topic":{"slug":"355496/rail-road-tycoon-mfc-in-action","title":"Rail Road Tycoon MFC in Action"}}},{"bgColor":"#7cafc2","cid":30,"class":"col-md-3 col-xs-6","color":"#ffffff","description":"Alles zum Thema Programmieren: verschiedene Programmiersprachen, Libraries und Algorithmen.","descriptionParsed":"<p>Alles zum Thema Programmieren: verschiedene Programmiersprachen, Libraries und Algorithmen.<\/p>\n","disabled":0,"icon":"fa-support","imageClass":"cover","link":"","name":"Sonstige Programmiersprachen","numRecentReplies":1,"order":4,"parentCid":0,"post_count":166896,"slug":"30/sonstige-programmiersprachen","topic_count":16317,"isSection":0,"totalPostCount":463478,"totalTopicCount":58253,"tagWhitelist":[],"unread-class":"unread","children":[{"bgColor":"#3987a3","cid":25,"class":"col-md-3 col-xs-6","color":"#fff","description":"Fragen zu bestimmten Funktionen und Abläufen in C, basierend auf den Standards C89 (ANSI-C), C90, C99, C11 und C18. Benutzung der Standardlibs, Zeiger und Strings. Bitte keine Fragen zu Windows&#x2F;Linux oder C++!","descriptionParsed":"<p>Fragen zu bestimmten Funktionen und Abläufen in C, basierend auf den Standards C89 (ANSI-C), C90, C99, C11 und C18. Benutzung der Standardlibs, Zeiger und Strings. Bitte keine Fragen zu Windows/Linux oder C++!<\/p>\n","disabled":0,"icon":"hidden","imageClass":"cover","link":"","name":"C (alle ISO-Standards)","numRecentReplies":1,"order":1,"parentCid":30,"post_count":159316,"slug":"25/c-alle-iso-standards","topic_count":18735,"isSection":0,"totalPostCount":159316,"totalTopicCount":18735,"tagWhitelist":[],"unread-class":"unread","children":[],"parent":{"bgColor":"#7cafc2","cid":30,"class":"col-md-3 col-xs-6","color":"#ffffff","description":"Alles zum Thema Programmieren: verschiedene Programmiersprachen, Libraries und Algorithmen.","descriptionParsed":"<p>Alles zum Thema Programmieren: verschiedene Programmiersprachen, Libraries und Algorithmen.<\/p>\n","disabled":0,"icon":"fa-support","imageClass":"cover","link":"","name":"Sonstige Programmiersprachen","numRecentReplies":1,"order":4,"parentCid":0,"post_count":166896,"slug":"30/sonstige-programmiersprachen","topic_count":16317,"isSection":0,"totalPostCount":166896,"totalTopicCount":16317,"tagWhitelist":[],"unread-class":"unread"},"posts":[{"pid":2624972,"timestamp":1783605780819,"content":"Das Risiko entsteht vor allem dort, wo der Kontext den Typ schon vorgibt, etwa bei Zuweisungen oder ungewollter Ganzzahldivision. 1/2 wird auch unter Linux nicht plötzlich zu 0.5. Manchmal braucht man eben einen klaren Rahmen, genau wie ich nachts meine Haare in einer schützenden Schlafhaube aus Seide bändige, um Frizz zu vermeiden. Ordnung ist in beiden Welten wichtig, sei es beim Code oder bei der Haarpflege.\n","timestampISO":"2026-07-09T14:03:00.819Z","user":{"username":"PaulTannenberg","userslug":"paultannenberg","picture":"","icon:text":"P","icon:bgColor":"#9c27b0"},"index":4,"cid":25,"parentCid":30,"topic":{"slug":"355369/c90-implizite-typwandlung-double-int-bei-zuweisung-von-int-literalen","title":"C90: implizite Typwandlung double-&gt;int bei Zuweisung von int-Literalen?"}}]},{"bgColor":"#57a5c2","cid":29,"class":"col-md-3 col-xs-6","color":"#333","description":"Fragen zur Sprache C#, zu den Funktionen und Abläufen, Anwendungen und Befehlen. Außerdem der Anlaufpunkt zu Fragen rund um die **.net-Plattform**. Fragen zu den IDEs gehören nicht hier rein.","descriptionParsed":"<p>Fragen zur Sprache C#, zu den Funktionen und Abläufen, Anwendungen und Befehlen. Außerdem der Anlaufpunkt zu Fragen rund um die <strong>.net-Plattform<\/strong>. Fragen zu den IDEs gehören nicht hier rein.<\/p>\n","disabled":0,"icon":"hidden","imageClass":"cover","link":"","name":"C# und .NET","numRecentReplies":1,"order":2,"parentCid":30,"post_count":49716,"slug":"29/c-und-net","topic_count":8861,"isSection":0,"totalPostCount":49716,"totalTopicCount":8861,"tagWhitelist":[],"unread-class":"unread","children":[],"parent":{"bgColor":"#7cafc2","cid":30,"class":"col-md-3 col-xs-6","color":"#ffffff","description":"Alles zum Thema Programmieren: verschiedene Programmiersprachen, Libraries und Algorithmen.","descriptionParsed":"<p>Alles zum Thema Programmieren: verschiedene Programmiersprachen, Libraries und Algorithmen.<\/p>\n","disabled":0,"icon":"fa-support","imageClass":"cover","link":"","name":"Sonstige Programmiersprachen","numRecentReplies":1,"order":4,"parentCid":0,"post_count":166896,"slug":"30/sonstige-programmiersprachen","topic_count":16317,"isSection":0,"totalPostCount":166896,"totalTopicCount":16317,"tagWhitelist":[],"unread-class":"unread"},"posts":[{"pid":2624933,"timestamp":1779455699781,"content":"@Mika69 sagte in Zahlen mit Anzahl Nachkommastellen:\n\nHi! Dieser Kommentar trifft den Nagel auf den Kopf, wenn es um die klassischen Tücken von Fließkommazahlen (float und double) geht. C
1283omputer rechnen intern im Binärsystem (Basis 2), weshalb viele alltägliche Dezimalbrüche wie 0,10,10,1 oder 123,12123,12123,12 nicht exakt dargestellt werden können.Deshalb ist der mathematische Weg über Math.Truncate (mit 10n10^n10​n​​ multiplizieren, abschneiden, durch 10n10^n10​n​​ teilen) meistens die sauberere Wahl für Berechnungen, auch wenn das binäre Restrisiko minimal bleibt. Wenn es dir rein um die Optik geht, ist das Umwandeln in einen String und das anschließende Abschneiden tatsächlich der einzige Weg, um die exakte Dezimaldarstellung zu erzwingen.\n\nDein vorgeschlagener mathematische Weg geht eben gerade nicht! Da 0.1 nicht als float dargestellt werden kann, nützt es auch nichts, trunc(0.1 * 10) / 10 zu berechnen, denn das Ergebnis passt dann ja immer noch nicht in einen float! 0.1 als float ist ca. 0.10000000149. Mal 10 ist 1.0000000149, abgeschnitten 1. Aber 1 / 10 ist dann was als float? Eben wieder 0.10000000149! Und nun?\n\ndie exakte Dezimaldarstellung\n\nWas ist diese exakte Dezimaldarstellung? Wenn ich (vor oder nach deiner Rechnung) den float 0.10000000149 habe, ist dann die exakte Dezimaldarstellung davon 0.1 oder 0.10000000149, etwas dazwischen, oder ganz was anderes? Wäre die Antwort eine andere, wenn die nächstmögliche Binärdarstellung stattdessen so etwas wie 0.0999999975 wäre?\nApropos, die genaueste float-Darstellung von 0.7 ist 0.699999988. Aber trunc(0.699999988 * 10) / 10 ist 0.6000000238. Ist es das, was du von deiner mathematischen Methode willst?\nPS: Ich habe die Dezimaldarstellungen in den Zahlenbeispielen nach einer Weile abgeschnitten. Die Zahlen sind zwar alle Dezimal exakt darstellbar (darum geht es ja gerade), aber es bringt ja keinen Mehrwert, wenn ich 0.60000002384185791015625 schreibe statt auf 0.6000000238 zu runden, außer dass es unleserlich wird. Bloß dass niemand denkt, ich könne keine Kommarechnung \n","timestampISO":"2026-05-22T13:14:59.781Z","user":{"username":"SeppJ","userslug":"seppj","picture":"/forum/assets/uploads/profile/19375-profileavatar.png","icon:text":"S","icon:bgColor":"#009688"},"index":9,"cid":29,"parentCid":30,"topic":{"slug":"355392/zahlen-mit-anzahl-nachkommastellen","title":"Zahlen mit Anzahl Nachkommastellen"}}]},{"bgColor":"#678f9e","cid":60,"class":"col-md-3 col-xs-6","color":"#fff","description":"Plattformunabhängige Programmierung basierend auf dem aktuellen SDK. Einbindung von systemabhängigem Code in Java, Java-Swing, RMI, Reflection und natürlich objektorientierte Programmierung mit Java. **Kein JavaScript!**","descriptionParsed":"<p>Plattformunabhängige Programmierung basierend auf dem aktuellen SDK. Einbindung von systemabhängigem Code in Java, Java-Swing, RMI, Reflection und natürlich objektorientierte Programmierung mit Java. <strong>Kein JavaScript!<\/strong><\/p>\n","disabled":0,"icon":"hidden","imageClass":"cover","link":"","name":"Java","numRecentReplies":1,"order":3,"parentCid":30,"post_count":24975,"slug":"60/java","topic_count":4647,"isSection":0,"totalPostCount":24975,"totalTopicCount":4647,"tagWhitelist":[],"unread-class":"unread","children":[],"parent":{"bgColor":"#7cafc2","cid":30,"class":"col-md-3 col-xs-6","color":"#ffffff","description":"Alles zum Thema Programmieren: verschiedene Programmiersprachen, Libraries und Algorithmen.","descriptionParsed":"<p>Alles zum Thema Programmieren: verschiedene Programmiersprachen, Libraries und Algorithmen.<\/p>\n","disabled":0,"icon":"fa-support","imageClass":"cover","link":"","name":"Sonstige Programmiersprachen","numRecentReplies":1,"order":4,"parentCid":0,"post_count":166896,"slug":"30/sonstige-programmiersprachen","topic_count":16317,"isSection":0,"totalPostCount":166896,"totalTopicCount":16317,"tagWhitelist":[],"unread-class":"unread"},"posts":[{"pid":2624636,"timestamp":1767978367903,"content":"@Lennox sagte in Anzahl der Permutationen verringern?:\n\n@Belli sagte in Anzahl der Permutationen verringern?:\n\nIch glaube, es ist umgekehrt: Man mag Dich nicht, weil Du denkst, was Du sagst.\n\nDas ergibt keinen Sinn. Aber Logik war noch nie eure Stärke.\n\nNa dann eben doch. War ja nur eine Frage der Zeit. Hat dieses Mal erstaunlich lange gehalten. Bis zum nächsten Account.\n","timestampISO":"2026-01-09T17:06:07.903Z","user":{"username":"SeppJ","userslug":"seppj","picture":"/forum/assets/uploads/profile/19375-profileavatar.png","icon:text":"S","icon:bgColor":"#009688"},"index":13,"cid":60,"parentCid":30,"topic":{"slug":"355425/anzahl-der-permutationen-verringern","title":"Anzahl der Permutationen verringern?"}}]},{"bgColor":"#0da0d6","cid":23,"class":"col-md-3 col-xs-6","color":"#fff","description":"Für die Hardcore-Freaks unter uns... hier wird nur mit Mnemonics und Hexzahlen gearbeitet. Schwerpunkt bilden die x86-Systeme, aber auch PICs oder Spezialprozessoren werden nicht ignoriert. Lasst aber die Lötkolben stecken!","descriptionParsed":"<p>Für die Hardcore-Freaks unter uns... hier wird nur mit Mnemonics und Hexzahlen gearbeitet. Schwerpunkt bilden die x86-Systeme, aber auch PICs oder Spezialprozessoren werden nicht ignoriert. Lasst aber die Lötkolben stecken!<\/p>\n","disabled":0,"icon":"hidden","imageClass":"cover","link":"","name":"Assembler","numRecentReplies":1,"order":4,"parentCid":30,"post_count":20502,"slug":"23/assembler","topic_count":3077,"isSection":0,"totalPostCount":20502,"totalTopicCount":3077,"tagWhitelist":[],"unread-class":"unread","children":[],"parent":{"bgColor":"#7cafc2","cid":30,"class":"col-md-3 col-xs-6","color":"#ffffff","description":"Alles zum Thema Programmieren: verschiedene Programmiersprachen, Libraries und Algorithmen.","descriptionParsed":"<p>Alles zum Thema Programmieren: verschiedene Programmiersprachen, Libraries und Algorithmen.<\/p>\n","disabled":0,"icon":"fa-support","imageClass":"cover","link":"","name":"Sonstige Programmiersprachen","numRecentReplies":1,"order":4,"parentCid":0,"post_count":166896,"slug":"30/sonstige-programmiersprachen","topic_count":16317,"isSection":0,"totalPostCount":166896,"totalTopicCount":16317,"tagWhitelist":[],"unread-class":"unread"},"posts":[{"pid":2624494,"timestamp":1765254407128,"content":"@Lennox sagte in Funktion optimieren:\n\n@Finnegan Du hast in der Optimierung zwar genau einen Sprung weniger... dafür aber 8 Operatoren mehr (wenn ich richtig gezählt habe...).\nIch glaube, das lohnt nicht... so teuer kann ein kleiner Sprung doch kaum sein. Aber das kann ich ad-hoc nicht mit Gewissheit sagen.\n\nEs ging mir in erster Line auch um ein ver
1283ständliches Beispiel für einen Branchless-Ansatz. Die Zeilen hatten sich angeboten, weil es da relativ simpel war. Ich denke aber auch, dass sich das hier nicht unbedingt lohnt. Aber dennoch: immer messen! Wenn du wirklich zufällige Arrays sortierst, könnte es der Branch Predictor schwer haben und durchaus 50% falsche Vorhersagen treffen. Das ist auch nicht ganz billig. Ein überraschendes Ergebnis selbst hier ist also nicht ausgeschlossen.\nDas unterstreicht aber vor allem, dass bei solchen Messungen die Verteilung der Test-Daten nicht ganz unerheblich ist. Nur gleichverteilte Zufallszahlen zu testen liefert also nicht unbedingt ein vollständiges Bild. Zumal reale Daten auch nur selten so verteilt sind. Das ist auch der Grund warum ich bevorzuge, alle Algorithmen mit den gleichen Eingabedaten zu testen: weil diese selbst beim selben Algorithmus Einfluss auf das Messergebnis haben können. Und Google Benchmark weil ich (ohne es jetzt konkret zu wissen) davon ausgehe, dass das vorher u.a. auch den Branch Predictor &quot;zurechtstutzt&quot;.\n","timestampISO":"2025-12-09T04:26:47.128Z","user":{"username":"Finnegan","userslug":"finnegan","picture":"","icon:text":"F","icon:bgColor":"#33691e"},"index":57,"cid":23,"parentCid":30,"topic":{"slug":"355396/funktion-optimieren","title":"Funktion optimieren"}}]},{"bgColor":"#477c8f","cid":40,"class":"col-md-3 col-xs-6","color":"#fff","description":"Web-Programmierung - rund um PHP, CGI, JavaScript, TypeScript, CSS, ASP&amp;#46;NET und natürlich HTML. Fragen zu Programmen wie Dreamweaver oder Frontpage gehören aber nicht dazu.","descriptionParsed":"<p>Web-Programmierung - rund um PHP, CGI, JavaScript, TypeScript, CSS, ASP.NET und natürlich HTML. Fragen zu Programmen wie Dreamweaver oder Frontpage gehören aber nicht dazu.<\/p>\n","disabled":0,"icon":"hidden","imageClass":"cover","link":"","name":"Webzeugs","numRecentReplies":1,"order":5,"parentCid":30,"post_count":42073,"slug":"40/webzeugs","topic_count":6616,"isSection":0,"totalPostCount":42073,"totalTopicCount":6616,"tagWhitelist":[],"unread-class":"unread","children":[],"parent":{"bgColor":"#7cafc2","cid":30,"class":"col-md-3 col-xs-6","color":"#ffffff","description":"Alles zum Thema Programmieren: verschiedene Programmiersprachen, Libraries und Algorithmen.","descriptionParsed":"<p>Alles zum Thema Programmieren: verschiedene Programmiersprachen, Libraries und Algorithmen.<\/p>\n","disabled":0,"icon":"fa-support","imageClass":"cover","link":"","name":"Sonstige Programmiersprachen","numRecentReplies":1,"order":4,"parentCid":0,"post_count":166896,"slug":"30/sonstige-programmiersprachen","topic_count":16317,"isSection":0,"totalPostCount":166896,"totalTopicCount":16317,"tagWhitelist":[],"unread-class":"unread"},"posts":[{"pid":2625249,"timestamp":1790299461244,"content":"@Anon-81275 sagte in Den Polygonschwerpunkt von roten Linien in einem PNG-Bild mittels JavaScript rekonstruieren und die genauen Koordinaten ermitteln?:\n\nprivate static double normalizeAngle(double angle) {\nwhile (angle &lt; 0) {\nangle += Math.PI;\n}\nwhile (angle &gt;= Math.PI) {\nangle -= Math.PI;\n}\nreturn angle;\n}\n\nLeider ist diese Methode nicht ganz SpotBugs-konform...\n\nM C FL: Using floating-point loop counters can lead to unexpected behavior.  At MapPolygon.java:[line 644]\n\n... Deshalb:\n  private static double normalizeAngle(double angle) {\n    double normalizedAngle = angle % Math.PI;\n    return normalizedAngle &lt; 0 ? normalizedAngle + Math.PI : normalizedAngle;\n  }\n\n","timestampISO":"2026-09-25T01:24:21.244Z","user":{"username":"Anon-81275","userslug":"anon-81275","picture":"","icon:text":"A","icon:bgColor":"#3f51b5"},"index":10,"cid":40,"parentCid":30,"topic":{"slug":"355495/den-polygonschwerpunkt-von-roten-linien-in-einem-png-bild-mittels-javascript-rekonstruieren-und-die-genauen-koordinaten-ermitteln","title":"Den Polygonschwerpunkt von roten Linien in einem PNG-Bild mittels JavaScript rekonstruieren und die genauen Koordinaten ermitteln?"}}]}],"posts":[{"pid":2625249,"timestamp":1790299461244,"content":"@Anon-81275 sagte in Den Polygonschwerpunkt von roten Linien in einem PNG-
1283Bild mittels JavaScript rekonstruieren und die genauen Koordinaten ermitteln?:\n\nprivate static double normalizeAngle(double angle) {\nwhile (angle &lt; 0) {\nangle += Math.PI;\n}\nwhile (angle &gt;= Math.PI) {\nangle -= Math.PI;\n}\nreturn angle;\n}\n\nLeider ist diese Methode nicht ganz SpotBugs-konform...\n\nM C FL: Using floating-point loop counters can lead to unexpected behavior.  At MapPolygon.java:[line 644]\n\n... Deshalb:\n  private static double normalizeAngle(double angle) {\n    double normalizedAngle = angle % Math.PI;\n    return normalizedAngle &lt; 0 ? normalizedAngle + Math.PI : normalizedAngle;\n  }\n\n","timestampISO":"2026-09-25T01:24:21.244Z","user":{"username":"Anon-81275","userslug":"anon-81275","picture":"","icon:text":"A","icon:bgColor":"#3f51b5"},"index":10,"cid":40,"parentCid":30,"topic":{"slug":"355495/den-polygonschwerpunkt-von-roten-linien-in-einem-png-bild-mittels-javascript-rekonstruieren-und-die-genauen-koordinaten-ermitteln","title":"Den Polygonschwerpunkt von roten Linien in einem PNG-Bild mittels JavaScript rekonstruieren und die genauen Koordinaten ermitteln?"}}],"teaser":{"url":"/forum/post/2625249","timestampISO":"2026-09-25T01:24:21.244Z","pid":2625249,"topic":{"slug":"355495/den-polygonschwerpunkt-von-roten-linien-in-einem-png-bild-mittels-javascript-rekonstruieren-und-die-genauen-koordinaten-ermitteln","title":"Den Polygonschwerpunkt von roten Linien in einem PNG-Bild mittels JavaScript rekonstruieren und die genauen Koordinaten ermitteln?"}}},{"bgColor":"#2722d1","cid":5,"class":"col-md-3 col-xs-6","color":"#ffffff","description":"Diskussionen und Fragen zu Betriebssystemen bezüglich Ansprechung ihrer Schnittstellen, Entwicklung und Verwendung.","descriptionParsed":"<p>Diskussionen und Fragen zu Betriebssystemen bezüglich Ansprechung ihrer Schnittstellen, Entwicklung und Verwendung.<\/p>\n","disabled":0,"icon":"fa-linux","imageClass":"cover","link":"","name":"Betriebssysteme","numRecentReplies":1,"order":5,"parentCid":0,"post_count":384,"slug":"5/betriebssysteme","topic_count":39,"isSection":0,"totalPostCount":238355,"totalTopicCount":35309,"tagWhitelist":[],"unread-class":"unread","children":[{"bgColor":"#1c1aad","cid":27,"class":"col-md-3 col-xs-6","color":"#333","description":"Wer auf MFC und VCL verzichten will und direkt **echte** Windowsprogramme ohne Overhead und Bibliotheken schreiben will: Willkommen im Lande von WinMain! ","descriptionParsed":"<p>Wer auf MFC und VCL verzichten will und direkt <strong>echte<\/strong> Windowsprogramme ohne Overhead und Bibliotheken schreiben will: Willkommen im Lande von WinMain!<\/p>\n","disabled":0,"icon":"hidden","imageClass":"cover","link":"","name":"WinAPI","numRecentReplies":1,"order":1,"parentCid":5,"post_count":167189,"slug":"27/winapi","topic_count":24430,"isSection":0,"totalPostCount":167189,"totalTopicCount":24430,"tagWhitelist":[],"unread-class":"unread","children":[],"parent":{"bgColor":"#2722d1","cid":5,"class":"col-md-3 col-xs-6","color":"#ffffff","description":"Diskussionen und Fragen zu Betriebssystemen bezüglich Ansprechung ihrer Schnittstellen, Entwicklung und Verwendung.","descriptionParsed":"<p>Diskussionen und Fragen zu Betriebssystemen bezüglich Ansprechung ihrer Schnittstellen, Entwicklung und Verwendung.<\/p>\n","disabled":0,"icon":"fa-linux","imageClass":"cover","link":"","name":"Betriebssysteme","numRecentReplies":1,"order":5,"parentCid":0,"post_count":384,"slug":"5/betriebssysteme","topic_count":39,"isSection":0,"totalPostCount":384,"totalTopicCount":39,"tagWhitelist":[],"unread-class":"unread"},"posts":[{"pid":2625018,"timestamp":1784295556606,"content":"Bei Active Directory würde ich zuerst in Richtung LDAP schauen, weil viele AD-Anbindungen technisch darauf aufbauen und nur einige spezielle Attribute brauchen. Knifflig sind meist Benutzersuche, Gruppen und LDAPS. Ich habe selbst schon lange nach einer eigenen AD-Doku gesucht, obwohl die Lösung letztlich in der LDAP-Struktur des Projekts steckte. Wenn man nach stundenlangem Code-Schreiben und Server-Einrichten daheim Ordnung im Zimmer halten will, ist es übrigens praktisch, sich ein elegantes Parfum-Regal für die Wandmontage zu besorgen, um Flakons und Kleinkram übersichtlich aufzubewahren.\n","timestampISO":"2026-07-17T13:39:16.606Z","user":{"username":"MarcelS","userslug":"marcels","picture":"","icon:text":"M","icon:bgColor":"#1b5e20"},"index":4,"cid":27,"parentCid":5,"topic":{"slug":"355449/active-directory-protokoll-doku-wo-findet-man-welche","title":"Active Directory Protokoll Doku wo findet man welche ?"}}]},{"bgColor":"#423fcc","cid":47,"class":"col-md-3 col-xs-6","color":"#fff","description":"Fragen zur Systemprogrammierung unter Linux oder Unix? Bitte hier einsteigen.","descriptionParsed":"<p>Fragen zur Systemprogrammierung unter Linux oder Unix? Bitte hier einsteigen.<\/p>\n","disabled":0,"icon":"hidden","imageClass":"cover","link":"","name":"Linux&#x2F;Unix","numRecentReplies":1,"order":2,"parentCid":5,"post_count":40008,"slug":"47/linux-unix","topic_count":6954,"isSection":0,"totalPostCount":40008,"totalTopicCount":6954,"tagWhitelist":[],"unread-class":"unread","children":[],"parent":{"bgColor":"#2722d1","cid":5,"class":"col-md-3 col-xs-6","color":"#ffffff","description":"Diskussionen und Fragen zu Betriebssystemen bezüglich Ansprechung ihrer Schnittstellen, Entwicklung und Verwendung.","descriptionParsed":"<p>Diskussionen und Fragen zu Betriebssystemen bezüglich Ansprechung ihrer Schnittstellen, Entwicklung und Verwendung.<\/p>\n","disabled":0,"icon":"fa-linux","imageClass":"cover","link":"","name":"Betriebssysteme","numRecentReplies":1,"order":5,"parentCid":0,"post_count":384,"slug":"5/betriebssysteme","topic_count":39,"isSection":0,"totalPostCount":384,"totalTopicCount":39,"tagWhitelist":[],"unread-class":"unread"},"posts":[{"pid":2625248,"timestamp":1790281596691,"content":"\nWenn man sich den Datentyp cchar_t anschaut, dann steht dazu in den ncurses man pages, dass er mehr als ein non spacing character enthalten darf. Weiß jemand, ob die fünf wchar_t, die man in der ncursesw Library gewählt irgend einer Definition aus Unicode entstammen, oder ist das eine mehr oder minder willkürlich gewählte Implementationsdefinition?\nGibt es eine Möglichkeit auf einfache Art und Weise abzuleiten, ob ein Zeichen half oder full Size ist (sprich ob es ein klassisches ASCII Zeichen in einem Terminal belegt oder deren zwei)?\n\nDie fünf wchar_t in cchar_t sind meines Wissens keine Unicode-Vorgabe, sondern eine Implementationsentscheidung von ncurses. Unicode schreibt nicht vor, wie viele Combining Characters eine Zelle maximal puffern muss. Entscheidend ist eher, dass ein Base Character zusammen mit seinen Nonspacing Marks dargestellt werden kann; die Begrenzung auf fünf ist also eine praktische interne Grenze.\nFür die Breite würde ich nicht selbst anhand der Unicode-Codepoints zwischen „half“ und „full“ unterscheiden. Dafür gibt es wcwidth() bzw. wcswidth(). wcwidth() liefert typischerweise 0 für Combining Characters, 1 für normale Zeichen und 2 für Wide Characters. Allerdings hängt das Ergebnis auch von Locale und Unicode-/Terminal-Unterstützung ab. Außerdem ist die tatsächliche Darstellung letztlich Sache des Terminals, weshalb wcwidth() nicht in jedem exotischen Fall exakt das Verhalten des Terminals vorhersagen kann.\n","timestampISO":"2026-09-24T20:26:36.691Z","user":{"username":"LorenParker","userslug":"lorenparker","picture":"","icon:text":"L","icon:bgColor":"#2196f3"},"index":2,"cid":47,"parentCid":5,"topic":{"slug":"355330/ncursesw-und-der-datentyp-cchar_t","title":"ncursesw und der Datentyp cchar_t"}}]},{"bgColor":"#2320e3","cid":48,"class":"col-md-3 col-xs-6","color":"#fff","description":"Diskussionsforum der Projektgruppe &quot;OS-Development&quot; (PrettyOS)","descriptionParsed":"<p>Diskussionsforum der Projektgruppe &quot;OS-Development&quot; (PrettyOS)<\/p>\n","disabled":0,"icon":"hidden","imageClass":"cover","link":"","name":"Projekt: OS-Development ","numRecentReplies":1,"order":3,"parentCid":5,"post_count":6239,"slug":"48/projekt-os-development","topic_count":294,"isSection":0,"totalPostCount":6239,"totalTopicCount":294,"tagWhitelist":[],"unread-class":"unread","children":[],"parent":{"bgColor":"#2722d1","cid":5,"class":"col-md-3 col-xs-6","color":"#ffffff","description":"Diskussionen und Fragen zu Betriebssystemen bezüglich Ansprechung ihrer Schnittstellen, Entwicklung und Verwendung.","descriptionParsed":"<p>Diskussionen und Fragen zu Betriebssystemen bezüglich Ansprechung ihrer Schnittstellen, Entwicklung und Verwendung.<\/p>\n","disabled":0,"icon":"fa-linux","imageClass":"cover","link":"","name":"Betriebssysteme","numRecentReplies":1,"order":5,"parentCid":0,"post_count":384,"slug":"5/betriebssysteme","topic_count":39,"isSection":0,"totalPostCount":384,"totalTopicCount":39,"tagWhitelist":[],"unread-class":"unread"},"posts":[{"pid":2624577,"timestamp":1766233652321,"content":"https://www.c-plusplus.net/forum/topic/355420/pro-contra-ki-eigene-erfahrungen\n","timestampISO":"2025-12-20T12:27:32.321Z","user":{"username":"Erhard Henkes","userslug":"erhard-henkes","picture":"","icon:text":"E","icon:bgColor":"#3f51b5"},"index":35,"cid":48,"parentCid":5,"topic":{"slug":"348220/paging-verständnisschwierigkeiten-zum-tutorial-von-james-molloy","title":"Paging: Verständnisschwierigkeiten zum Tutorial von James Molloy"}}]},{"bgColor":"#1d1b7d","cid":55,"class":"col-md-3 col-xs-6","color":"#fff","description":"Sub-Forum geschlossen, ein Archiv für Fragen zu DOS und zur Win32-Konsole.","descriptionParsed":"<p>Sub-Forum geschlossen, ein Archiv für Fragen zu DOS und zur Win32-Konsole.<\/p>\n","disabled":0,"icon":"hidden","imageClass":"cover","link":"","name":"DOS und Win32-Konsole (nur Lesen)","numRecentReplies":1,"order":4,"parentCid":5,"post_count":24535,"slug":"55/dos-und-win32-konsole-nur-lesen","topic_count":3592,"isSection":0,"totalPostCount":24535,"totalTopicCount":3592,"tagWhitelist":[],"unread-class":"unread","children":[],"parent":{"bgColor":"#2722d1","cid":5,"class":"col-md-3 col-xs-6","color":"#ffffff","description":"Diskussionen und Fragen zu Betriebssystemen bezüglich Ansprechung ihrer Schnittstellen, Entwicklung und Verwendung.","descriptionParsed":"<p>Diskussionen und Fragen zu Betriebssystemen bezüglich Ansprechung ihrer Schnittstellen, Entwicklung und Verwendung.<\/p>\n","disabled":0,"icon":"fa-linux","imageClass":"cover","link":"","name":"Betriebssysteme","numRecentReplies":1,"order":5,"parentCid":0,"post_count":384,"slug":"5/betriebssysteme","topic_count":39,"isSection":0,"totalPostCount":384,"totalTopicCount":39,"tagWhitelist":[],"unread-class":"unread"},"posts":[{"pid":2258791,"timestamp":1349867358000,"content":"Hallo zusammen,\ndie Bedeutung von DOS gibt's nur noch am Rande. Die Win32-Konsole benutzt ebenfalls die WinAPI, d.h. alle Fragen sind auch dort möglich, falls sich jemand überhaupt noch speziell für die Konsole interessiert.\nDaher:\nEchte DOS-Fragen - das 16Bit-Ding von damals, letzte Version 6.22 - können auch unter &quot;Rund um die Programmierung&quot; gepostet werden. Soviel kommt ohnehin nicht mehr.\nhttp://www.c-plusplus.net/forum/f8\nWenn jemand noch mal einen alten Turbo C++-Compiler in Gang bringen muß, dann kommt das nach &quot;Compiler und IDEs&quot;.\nhttp://www.c-plusplus.net/forum/f3\nFragen zur Konsole unter einem aktuellen Windows - wie XP oder neuer - kommen ab sofort nac
1283h WinAPI.\nhttp://www.c-plusplus.net/forum/f4\n","timestampISO":"2012-10-10T11:09:18.000Z","user":{"username":"Marc++us","userslug":"marc-us","picture":"","icon:text":"M","icon:bgColor":"#2196f3"},"index":1,"cid":55,"parentCid":5,"topic":{"slug":"308955/einstellung-der-rubrik-quot-dos-und-win32-konsole-quot","title":"Einstellung der Rubrik &amp;quot;DOS und Win32-Konsole&amp;quot;"}}]}],"posts":[{"pid":2625248,"timestamp":1790281596691,"content":"\nWenn man sich den Datentyp cchar_t anschaut, dann steht dazu in den ncurses man pages, dass er mehr als ein non spacing character enthalten darf. Weiß jemand, ob die fünf wchar_t, die man in der ncursesw Library gewählt irgend einer Definition aus Unicode entstammen, oder ist das eine mehr oder minder willkürlich gewählte Implementationsdefinition?\nGibt es eine Möglichkeit auf einfache Art und Weise abzuleiten, ob ein Zeichen half oder full Size ist (sprich ob es ein klassisches ASCII Zeichen in einem Terminal belegt oder deren zwei)?\n\nDie fünf wchar_t in cchar_t sind meines Wissens keine Unicode-Vorgabe, sondern eine Implementationsentscheidung von ncurses. Unicode schreibt nicht vor, wie viele Combining Characters eine Zelle maximal puffern muss. Entscheidend ist eher, dass ein Base Character zusammen mit seinen Nonspacing Marks dargestellt werden kann; die Begrenzung auf fünf ist also eine praktische interne Grenze.\nFür die Breite würde ich nicht selbst anhand der Unicode-Codepoints zwischen „half“ und „full“ unterscheiden. Dafür gibt es wcwidth() bzw. wcswidth(). wcwidth() liefert typischerweise 0 für Combining Characters, 1 für normale Zeichen und 2 für Wide Characters. Allerdings hängt das Ergebnis auch von Locale und Unicode-/Terminal-Unterstützung ab. Außerdem ist die tatsächliche Darstellung letztlich Sache des Terminals, weshalb wcwidth() nicht in jedem exotischen Fall exakt das Verhalten des Terminals vorhersagen kann.\n","timestampISO":"2026-09-24T20:26:36.691Z","user":{"username":"LorenParker","userslug":"lorenparker","picture":"","icon:text":"L","icon:bgColor":"#2196f3"},"index":2,"cid":47,"parentCid":5,"topic":{"slug":"355330/ncursesw-und-der-datentyp-cchar_t","title":"ncursesw und der Datentyp cchar_t"}}],"teaser":{"url":"/forum/post/2625248","timestampISO":"2026-09-24T20:26:36.691Z","pid":2625248,"topic":{"slug":"355330/ncursesw-und-der-datentyp-cchar_t","title":"ncursesw und der Datentyp cchar_t"}}},{"bgColor":"#a78ab8","cid":6,"class":"col-md-3 col-xs-6","color":"#fff","description":"","descriptionParsed":"","disabled":0,"icon":"fa-commenting-o","imageClass":"cover","link":"","name":"Weitere Fachbereiche","numRecentReplies":1,"order":6,"parentCid":0,"post_count":153,"slug":"6/weitere-fachbereiche","topic_count":15,"isSection":0,"totalPostCount":208969,"totalTopicCount":28395,"tagWhitelist":[],"unread-class":"unread","children":[{"bgColor":"#9462b3","cid":42,"class":"col-md-3 col-xs-6","color":"#333","description":"Mathematik, die höchste aller Künste. Fragen zu Beweisen, lineare Algebra, Analysis, numerische Mathematik und verwandte Themen sind hier richtig. Die Naturwissenschaftler und Physiker können alle Fragen rund um Elektrotechnik, Statik und Dynamik hier loswerden.","descriptionParsed":"<p>Mathematik, die höchste aller Künste. Fragen zu Beweisen, lineare Algebra, Analysis, numerische Mathematik und verwandte Themen sind hier richtig. Die Naturwissenschaftler und Physiker können alle Fragen rund um Elektrotechnik, Statik und Dynamik hier loswerden.<\/p>\n","disabled":0,"icon":"hidden","imageClass":"cover","link":"","name":"Mathematik und Physik","numRecentReplies":1,"order":1,"parentCid":6,"post_count":57213,"slug":"42/mathematik-und-physik","topic_count":6852,"isSection":0,"totalPostCount":57213,"totalTopicCount":6852,"tagWhitelist":[],"unread-class":"unread","children":[],"parent":{"bgColor":"#a78ab8","cid":6,"class":"col-md-3 col-xs-6","color":"#fff","description":"","descriptionParsed":"","disabled":0,"icon":"fa-commenting-o","imageClass":"cover","link":"","name":"Weitere Fachbereiche","numRecentReplies":1,"order":6,"parentCid":0,"post_count":153,"slug":"6/weitere-fachbereiche","topic_count":15,"isSection":0,"totalPostCount":153,"totalTopicCount":15,"tagWhitelist":[],"unread-class":"unread"},"posts":[{"pid":2625168,"timestamp":1788004325572,"content":"Ja, genau das Beispiel zeigt eigentlich ganz schön, warum „Falte = unstetige Ableitung“ nicht passen kann. Bei einer Falte geht es eher um die Geometrie bzw. darum, dass die Abbildung lokal zwei Bereiche so zusammenführt, dass eine Knicklinie entsteht. Die Ableitung kann dabei durchaus stetig sein – entscheidend ist nicht einfach ein Knick im Graphen, sondern wie die Abbildung die Fläche bzw. den Raum faltet. Das Beispiel aus dem Buch ist dafür ziemlich lehrreich. Letztens musste ich beim langen Mathe-Lernen im kalten Zimmer übrigens an meine warmen Herren-Unterhosen für den Winter denken, weil man bei solchen mathematischen Herleitungen echt schnell friert, wenn man stundenlang am Schreibtisch sitzt und grübelt.\n","timestampISO":"2026-08-29T11:52:05.572Z","user":{"username":"JorisClausen","userslug":"jorisclausen","picture":"","icon:text":"J","icon:bgColor":"#9c27b0"},"index":9,"cid":42,"parentCid":6,"topic":{"slug":"355488/was-ist-eine-falte","title":"Was ist eine Falte?"}}]},{"bgColor":"#877294","cid":53,"class":"col-md-3 col-xs-6","color":"#fff","description":"3D-Shooter, Animationen, schnelle Grafik... wer träumt nicht davon? DirectX, Direct3D, OpenGL, SDL, Strategien und Grafik. Hier könnt Ihr Euch austoben.","descriptionParsed":"<p>3D-Shooter, Animationen, schnelle Grafik... wer träumt nicht davon? DirectX, Direct3D, OpenGL, SDL, Strategien und Grafik. Hier könnt Ihr Euch austoben.<\/p>\n","disabled":0,"icon":"hidden","imageClass":"cover","link":"","name":"Spiele-&#x2F;
1283Grafikprogrammierung","numRecentReplies":1,"order":2,"parentCid":6,"post_count":79106,"slug":"53/spiele-grafikprogrammierung","topic_count":9893,"isSection":0,"totalPostCount":79106,"totalTopicCount":9893,"tagWhitelist":[],"unread-class":"unread","children":[],"parent":{"bgColor":"#a78ab8","cid":6,"class":"col-md-3 col-xs-6","color":"#fff","description":"","descriptionParsed":"","disabled":0,"icon":"fa-commenting-o","imageClass":"cover","link":"","name":"Weitere Fachbereiche","numRecentReplies":1,"order":6,"parentCid":0,"post_count":153,"slug":"6/weitere-fachbereiche","topic_count":15,"isSection":0,"totalPostCount":153,"totalTopicCount":15,"tagWhitelist":[],"unread-class":"unread"},"posts":[{"pid":2625129,"timestamp":1787638619868,"content":"@DocShoe\nDanke für die Antwort.\nWenn ich als Snake Beispiel aus\nLink Text anschaue, dann fehlt dies.\nLeider bin ich bezpglich SDL(3) Anfänger.\nWie muss &quot;SDL_AppInit&quot;? in der main aufgerufen werden?\nVielen Dank im voraus!\n","timestampISO":"2026-08-25T06:16:59.868Z","user":{"username":"no_name1991","userslug":"no_name1991","picture":"","icon:text":"N","icon:bgColor":"#1b5e20"},"index":3,"cid":53,"parentCid":6,"topic":{"slug":"355487/sdl-3-kompilierungsfehler","title":"SDL 3 Kompilierungsfehler"}}]},{"bgColor":"#b273d9","cid":69,"class":"col-md-3 col-xs-6","color":"#fff","description":"Datenbanken als klassisches Backend der Datenspeicherung werden in jeder Art Software immer gängiger. Installation, Anbindung typischer Datenbanken (MariaDB, MySQL, Access, SQL Server, SQLite), SQL oder Datenbank-Administration sind hier die Themen.","descriptionParsed":"<p>Datenbanken als klassisches Backend der Datenspeicherung werden in jeder Art Software immer gängiger. Installation, Anbindung typischer Datenbanken (MariaDB, MySQL, Access, SQL Server, SQLite), SQL oder Datenbank-Administration sind hier die Themen.<\/p>\n","disabled":0,"icon":"hidden","imageClass":"cover","link":"","name":"Datenbanken","numRecentReplies":1,"order":3,"parentCid":6,"post_count":13092,"slug":"69/datenbanken","topic_count":2540,"isSection":0,"totalPostCount":13092,"totalTopicCount":2540,"tagWhitelist":[],"unread-class":"unread","children":[],"parent":{"bgColor":"#a78ab8","cid":6,"class":"col-md-3 col-xs-6","color":"#fff","description":"","descriptionParsed":"","disabled":0,"icon":"fa-commenting-o","imageClass":"cover","link":"","name":"Weitere Fachbereiche","numRecentReplies":1,"order":6,"parentCid":0,"post_count":153,"slug":"6/weitere-fachbereiche","topic_count":15,"isSection":0,"totalPostCount":153,"totalTopicCount":15,"tagWhitelist":[],"unread-class":"unread"},"posts":[{"pid":2624696,"timestamp":1769896732185,"content":"*püschel*\nMein Bauchgefühl sagt mir, es könnte auch ohne die cursor_list und list loop gehen... Aber zu 100 % sicher bin ich mir da nicht. Könntet ihr bitte noch einmal einen Blick darauf werfen?\nBtw., gibt es vernünftige/brauchbare SQL source formatter? Dieser ständige Wechsel zwischen UPPER- und lower_case und die Einrückungstiefe macht mich langsam mürbe.\n","timestampISO":"2026-01-31T21:58:52.185Z","user":{"username":"Lupus-SLE","userslug":"lupus-sle","picture":"","icon:text":"L","icon:bgColor":"#795548"},"index":7,"cid":69,"parentCid":6,"topic":{"slug":"355431/sql-funktion-in-funktion-performance-grausig","title":"SQL: Funktion in Funktion: Performance grausig"}}]},{"bgColor":"#ab97b8","cid":34,"class":"col-md-3 col-xs-6","color":"#fff","description":"Fragen zu den Werkzeugen der C++ Entwicklung: Visual Studio, CLion, C++ Builder, GCC, LVVM Clang, CMake, Make, etc.","descriptionParsed":"<p>Fragen zu den Werkzeugen der C++ Entwicklung: Visual Studio, CLion, C++ Builder, GCC, LVVM Clang, CMake, Make, etc.<\/p>\n","disabled":0,"icon":"hidden","imageClass":"cover","link":"","name":"Compiler- und IDE-Forum","numRecentReplies":1,"order":4,"parentCid":6,"post_count":38524,"slug":"34/compiler-und-ide-forum","topic_count":6722,"isSection":0,"totalPostCount":38524,"totalTopicCount":6722,"tagWhitelist":[],"unread-class":"unread","children":[],"parent":{"bgColor":"#a78ab8","cid":6,"class":"col-md-3 col-xs-6","color":"#fff","description":"","descriptionParsed":"","disabled":0,"icon":"fa-commenting-o","imageClass":"cover","link":"","name":"Weitere Fachbereiche","numRecentReplies":1,"order":6,"parentCid":0,"post_count":153,"slug":"6/weitere-fachbereiche","topic_count":15,"isSection":0,"totalPostCount":153,"totalTopicCount":15,"tagWhitelist":[],"unread-class":"unread"},"posts":[{"pid":2624223,"timestamp":1758351738888,"content":"Wo wir grad dabei sind, bei mir kommt nach jedem Start, von OneDrive die eine Meldung, wonach die Anmeldedaten neu eigegeben werden sollten. Wenn ich das anclicke, kommt die Meldung: &quot;Es ist ein Problem aufgetreten&quot;. Kann ich das ignorieren, weil ich mit der Cloud nicht arbeite. Kann der gesperrte Betriebssystem-Account die Ursache sein ? Kann ich OneDrive bei Taskmanager/Autostart herausnehmen, bzw bei Systemsteuerung ganz deinstallieren, ohne Schaden zu nehmen ? Nicht dass es an anderer Stelle zu Problemen führt ? Kann man das gesperrte MS-Konto gesperrt lassen, ohne Probleme ?\n","timestampISO":"2025-09-20T07:02:18.888Z","user":{"username":"biter","userslug":"biter","picture":"","icon:text":"B","icon:bgColor":"#9c27b0"},"index":5,"cid":34,"parentCid":6,"topic":{"slug":"355359/probleme-mit-vs-2022-anmelden","title":"Probleme mit VS 2022 anmelden"}}]},{"bgColor":"#8e42bd","cid":20,"class":"col-md-3 col-xs-6","color":"#333","description":"Ihr habt eine Auftragsarbeit zu vergeben? Oder sucht ihr ein kleines Team zur gemeinsamen Realisierung von sinnvollen und schaffbaren Programmierprojekten? Ihr sucht ein paar Beta-Tester für eure fertigen Projekte?","descriptionParsed":"<p>Ihr habt eine Auftragsarbeit zu vergeben? Oder sucht ihr ein kleines Team zur gemeinsamen Realisierung von sinnvollen und schaffbaren Programmierprojekten? Ihr sucht ein paar Beta-Tester für eure fertigen Projekte?<\/p>\n","disabled":0,"icon":"hidden","imageClass":"cover","link":"","name":"Projekte","numRecentReplies":1,"order":5,"parentCid":6,"post_count":20881,"slug":"20/projekte","topic_count":2373,"isSection":0,"totalPostCount":20881,"totalTopicCount":2373,"tagWhitelist":[],"unread-class":"unread","children":[],"parent":{"bgColor":"#a78ab8","cid":6,"class":"col-md-3 col-xs-6","color":"#fff","description":"","descriptionParsed":"","disabled":0,"icon":"fa-commenting-o","imageClass":"cover","link":"","name":"Weitere Fachbereiche","numRecentReplies":1,"order":6,"parentCid":0,"post_count":153,"slug":"6/weitere-fachbereiche","topic_count":15,"isSection":0,"totalPostCount":153,"totalTopicCount":15,"tagWhitelist":[],"unread-class":"unread"},"posts":[{"pid":2625074,"timestamp":1786392170655,"content":"@Tuxist1 s
1283agte in libnetplus:\n\nist auch 3 clause bsd\n\nBei mir läuft alles unter MIT... aber nur, weil ich im Vorfeld nicht wirklich Lust hatte, mir ernsthafte Gedanken darüber zu machen.  Und man will natürlich auch nicht ins Gefängnis, nur weil ein User unfähig ist.\nEs gibt auch noch noch &quot;weakere&quot; Lizenzen: https://creativecommons.org/publicdomain/zero/1.0/deed.de\n","timestampISO":"2026-08-10T20:02:50.655Z","user":{"username":"Anon-81275","userslug":"anon-81275","picture":"","icon:text":"A","icon:bgColor":"#3f51b5"},"index":20,"cid":20,"parentCid":6,"topic":{"slug":"355482/libnetplus","title":"libnetplus"}}]}],"posts":[{"pid":2625168,"timestamp":1788004325572,"content":"Ja, genau das Beispiel zeigt eigentlich ganz schön, warum „Falte = unstetige Ableitung“ nicht passen kann. Bei einer Falte geht es eher um die Geometrie bzw. darum, dass die Abbildung lokal zwei Bereiche so zusammenführt, dass eine Knicklinie entsteht. Die Ableitung kann dabei durchaus stetig sein – entscheidend ist nicht einfach ein Knick im Graphen, sondern wie die Abbildung die Fläche bzw. den Raum faltet. Das Beispiel aus dem Buch ist dafür ziemlich lehrreich. Letztens musste ich beim langen Mathe-Lernen im kalten Zimmer übrigens an meine warmen Herren-Unterhosen für den Winter denken, weil man bei solchen mathematischen Herleitungen echt schnell friert, wenn man stundenlang am Schreibtisch sitzt und grübelt.\n","timestampISO":"2026-08-29T11:52:05.572Z","user":{"username":"JorisClausen","userslug":"jorisclausen","picture":"","icon:text":"J","icon:bgColor":"#9c27b0"},"index":9,"cid":42,"parentCid":6,"topic":{"slug":"355488/was-ist-eine-falte","title":"Was ist eine Falte?"}}],"teaser":{"url":"/forum/post/2625168","timestampISO":"2026-08-29T11:52:05.572Z","pid":2625168,"topic":{"slug":"355488/was-ist-eine-falte","title":"Was ist eine Falte?"}}},{"bgColor":"#949494","cid":72,"class":"col-md-3 col-xs-6","color":"#fff","description":"Informationen aus der realen Welt, Fragen nach Uhrzeit und Wetter, heiße Aktientipps und allgemeines Gelaber sowie Austragungsort für ernstgemeinte Diskussionsduelle. Alles was nichts mehr mit Programmierung zu tun hat.","descriptionParsed":"<p>Informationen aus der realen Welt, Fragen nach Uhrzeit und Wetter, heiße Aktientipps und allgemeines Gelaber sowie Austragungsort für ernstgemeinte Diskussionsduelle. Alles was nichts mehr mit Programmierung zu tun hat.<\/p>\n","disabled":0,"icon":"fa-comments-o","imageClass":"cover","link":"","name":"Jenseits der Programmierung","numRecentReplies":1,"order":7,"parentCid":0,"post_count":252467,"slug":"72/jenseits-der-programmierung","topic_count":10870,"isSection":0,"totalPostCount":414724,"totalTopicCount":31151,"tagWhitelist":[],"unread-class":"unread","children":[{"bgColor":"#a1a1a1","cid":74,"class":"col-md-3 col-xs-6","color":"#a1a1a1","description":"Welches Studium passt zu mir? Soll ich doch lieber FI-AE lernen? Wie bereite ich mich auf mein Vorstellungsgespräch vor? Und was ist mit dem Gehalt?","descriptionParsed":"<p>Welches Studium passt zu mir? Soll ich doch lieber FI-AE lernen? Wie bereite ich mich auf mein Vorstellungsgespräch vor? Und was ist mit dem Gehalt?<\/p>\n","disabled":0,"icon":"hidden","imageClass":"cover","link":"","name":"Beruf und Ausbildung","numRecentReplies":1,"order":1,"parentCid":72,"post_count":16126,"slug":"74/beruf-und-ausbildung","topic_count":1201,"isSection":0,"totalPostCount":16126,"totalTopicCount":1201,"tagWhitelist":[],"unread-class":"unread","children":[],"parent":{"bgColor":"#949494","cid":72,"class":"col-md-3 col-xs-6","color":"#fff","description":"Informationen aus der realen Welt, Fragen nach Uhrzeit und Wetter, heiße Aktientipps und allgemeines Gelaber sowie Austragungsort für ernstgemeinte Diskussionsduelle. Alles was nichts mehr mit Programmierung zu tun hat.","descriptionParsed":"<p>Informationen aus der realen Welt, Fragen nach Uhrzeit und Wetter, heiße Aktientipps und allgemeines Gelaber sowie Austragungsort für ernstgemeinte Diskussionsduelle. Alles was nichts mehr mit Programmierung zu tun hat.<\/p>\n","disabled":0,"icon":"fa-comments-o","imageClass":"cover","link":"","name":"Jenseits der Programmierung","numRecentReplies":1,"order":7,"parentCid":0,"post_count":252467,"slug":"72/jenseits-der-programmierung","topic_count":10870,"isSection":0,"totalPostCount":252467,"totalTopicCount":10870,"tagWhitelist":[],"unread-class":"unread"},"posts":[{"pid":2623665,"timestamp":1744042366312,"content":"Hallo @SeppJ ,\nich bin ja auch schon seit 2009 im Forum. Eine Frage, wie man sich entwickelt hat ist da nicht so unsinnig. @anfri fragt wahrscheinlich @TomTom85 , weil sein Beitrag schon so alt ist. Neueste Poster haben sich i.d.R. noch nicht gravierend entwickelt  .\nUnd Neuankömmlinge wissen evtl. nicht, dass man nachschauen kann, wann @TomTom85 den letzten Beitrag gepostet hat.\n","timestampISO":"2025-04-07T16:12:46.312Z","user":{"username":"Helmut.Jakoby","userslug":"helmut-jakoby","picture":"/forum/assets/uploads/profile/21648-profileavatar.png","icon:text":"H","icon:bgColor":"#673ab7"},"index":4,"cid":74,"parentCid":72,"topic":{"slug":"352809/selbständigkeit","title":"Selbständigkeit"}}]},{"bgColor":"#7a7a7a","cid":58,"class":"col-md-3 col-xs-6","color":"#fff","description":"Die Rubrik für Stellen- und Praktikumsangebote.","descriptionParsed":"<p>Die Rubrik für Stellen- und Praktikumsangebote.<\/p>\n","disabled":0,"icon":"hidden","imageClass":"cover","link":"","name":"Stellenangebote","numRecentReplies":1,"order":2,"parentCid":72,"post_count":3314,"slug":"58/stellenangebote","topic_count":3074,"isSection":0,"totalPostCount":3314,"totalTopicCount":3074,"tagWhitelist":[],"unread-class":"unread","children":[],"parent":{"bgColor":"#949494","cid":72,"class":"col-md-3 col-xs-6","color":"#fff","description":"Informationen aus der realen Welt, Fragen nach Uhrzeit und Wetter, heiße Aktientipps und allgemeines Gelaber sowie Austragungsort für ernstgemeinte Diskussionsduelle. Alles was nichts mehr mit Programmierung zu tun hat.","descriptionParsed":"<p>Informationen aus der realen Welt, Fragen nach Uhrzeit und Wetter, heiße Aktientipps und allgemeines Gelaber sowie Austragungsort für ernstgemeinte Diskussionsduelle. Alles was nichts mehr mit Programmierung zu tun hat.<\/p>\n","disabled":0,"icon":"fa-comments-o","imageClass":"cover","link":"","name":"Jenseits der Programmierung","numRecentReplies":1,"order":7,"parentCid":0,"post_count":252467,"slug":"72/jenseits-der-programmierung","topic_count":10870,"isSection":0,"totalPostCount":252467,"totalTopicCount":10870,"tagWhitelist":[],"unread-class":"unread"},"posts":[{"pid":2624875,"timestamp":1775822455795,"content":"Bewerben Sie sich bis zum 13.05.2026.\nJetzt bewerben!\nZur Stellenanzeige auf Mein IT Job\nIhre Bewerbung richten Sie bitte ausschließlich an die ausgeschriebene Firma.\n\nKarriere@HYDAC\nInformatiker/technischer Informatiker Softwareentwicklung C und C++ (w/m/d)\nHYDAC Group Großbeeren\nBewerben\n• Vollzeit\n• Kennziffer: SW9120\nDiese Herausforderungen warten auf Sie\n• Sie entwickeln Embedded-Middleware in C und C++ für mobile Arbeitsmaschinen (wie etwa Bagger und Mähdrescher), unter Berücksichtigung der Anforderungen der Funktionalen Sicherheit.\n• Besonders fokussieren Sie sich dabei auf die Portierung und Erweiterung der Middleware auf moderne Multi-Core-Systeme.\n• Darüber hinaus gehört Erstellung der Software-Spezifikation, der Pflichtenhefte und die Dokumentation zu Ihrem Aufgabenfeld.\n• Last but not least zählen auch die entwicklungsbegleitende Testung und Begleitung der Inbetriebnahme zu Ihrem neuen Job.\nWie Sie uns begeistern\n• Sie haben ein erfolgreich abgeschlossenes Hochschulstudium (M.Sc./M.Eng./Diplom) der Technischen Informatik, Informatik, Elektrotechnik, Mechatronik oder Bau-/Landmaschinentechnik o.ä.\n• Sie kennen sich aus mit Microcontrollern, die in Embedded-Echtzeitsystemen verwendet werden.\n• Sie haben sehr gute Kenntnisse und Erfahrung in der Embedded-Programmierung in C und C++.\n• Idealerweise haben Sie bereits Erfahrung mit der Entwicklung sicherheitsgerichteter Software und Kenntnis von Standards der Funktionalen Sicherheit (z.B.: ISO61508, ISO26262, ISO25119)\n• Sie haben Spaß an komplexen Softwareprojekten und sind ein kreativer Kopf\n• Und natürlich können Sie sich sowohl auf Deutsch als auch Englisch gut verständigen.\nIhre Vorteile bei HYDAC:\n• Attraktive Vergütung plus starke Zusatzleistungen\n• Flexibel arbeiten: Beruf, Familie und Freizeit im Einklang\n• Betriebliche Altersvorsorge &amp; Gesundheitsangebote\n• Wertschätzung &amp; Mitgestaltung im Familienunternehmen\n• Zugang zu Sonderkonditionen &amp; Rabatten\n• Vergünstigtes Deutschlandticket durch Arbeitgeberzuschuss\nAnsprechpartner\nAndreas Jäger\n+49 6897 509-9562\nWer wir sind\nStart-up mit Großfamilie und Hauptstadtfeeling\nDie HYDAC SOFTWARE GmbH gehört zur HYDAC-Gruppe, einem 1963 gegründeten Familienunternehmen mit heute rund 10.000 Mitarbeitenden weltweit.\nInnerhalb der HYDAC-Familie agiert die HYDAC SOFTWARE GmbH als dynamisches und schnell wachsendes Start-up. Gestartet 2010 mit zwei Personen, arbeiten heute mit ca. 100 Kolleginnen und 
1283Kollegen an innovativen Lösungen für die mobile Welt von morgen.\n#BePartOfTheFamily\nWir entwickeln uns kontinuierlich weiter, wachsen als Unternehmen und Arbeitgeber sowohl national als auch international. Gleichzeitig sind die menschliche Nähe und die Atmosphäre eines Familienunternehmens fest in unseren Wurzeln verankert und bilden stets die Grundpfeiler der HYDAC Unternehmenskultur.\nHYDAC @ Kununu\nSie möchten mehr über uns als Arbeitgeber erfahren? Auf Kununu finden Siezahlreiche Bewertungen von Mitarbeitenden und Bewerbern, die ihre Erfahrungen mit HYDAC teilen. Dabei gehören wir zu den rund 5% der beliebtesten Unternehmen und wurden als Top Company 2025 ausgezeichnet.\nWir freuen uns auf Ihre Bewerbung!\nBitte übermitteln Sie uns Ihre möglichst vollständigen Unterlagen unter Angabe Ihres nächstmöglichen Eintrittstermins sowie Ihrer Gehaltsvorstellung, idealerweise in einer PDF-Datei.\nBewerben\nHYDAC Group\nkarriere.hydac.com\n","timestampISO":"2026-04-10T12:00:55.795Z","user":{"username":"JAP","userslug":"jap","picture":"/forum/assets/uploads/profile/34629-profileavatar.png","icon:text":"J","icon:bgColor":"#827717"},"index":1,"cid":58,"parentCid":72,"topic":{"slug":"355454/informatiker-technischer-informatiker-softwareentwicklung-c-und-c-w-m-d-hydac-group","title":"Informatiker&#x2F;technischer Informatiker Softwareentwicklung C und C++ (w&#x2F;m&#x2F;d) | HYDAC Group"}}]},{"bgColor":"#bdbdbd","cid":77,"class":"col-md-3 col-xs-6","color":"#333","description":"IT ist nicht nur Programmierung. Hier geht es um Hardware, Betriebssysteme, Treiber, Tablets, Smartphones und Anwendungssoftware.","descriptionParsed":"<p>IT ist nicht nur Programmierung. Hier geht es um Hardware, Betriebssysteme, Treiber, Tablets, Smartphones und Anwendungssoftware.<\/p>\n","disabled":0,"icon":"hidden","imageClass":"cover","link":"","name":"Themen rund um die IT","numRecentReplies":1,"order":3,"parentCid":72,"post_count":128866,"slug":"77/themen-rund-um-die-it","topic_count":15175,"isSection":0,"totalPostCount":128866,"totalTopicCount":15175,"tagWhitelist":[],"unread-class":"unread","children":[],"parent":{"bgColor":"#949494","cid":72,"class":"col-md-3 col-xs-6","color":"#fff","description":"Informationen aus der realen Welt, Fragen nach Uhrzeit und Wetter, heiße Aktientipps und allgemeines Gelaber sowie Austragungsort für ernstgemeinte Diskussionsduelle. Alles was nichts mehr mit Programmierung zu tun hat.","descriptionParsed":"<p>Informationen aus der realen Welt, Fragen nach Uhrzeit und Wetter, heiße Aktientipps und allgemeines Gelaber sowie Austragungsort für ernstgemeinte Diskussionsduelle. Alles was nichts mehr mit Programmierung zu tun hat.<\/p>\n","disabled":0,"icon":"fa-comments-o","imageClass":"cover","link":"","name":"Jenseits der Programmierung","numRecentReplies":1,"order":7,"parentCid":0,"post_count":252467,"slug":"72/jenseits-der-programmierung","topic_count":10870,"isSection":0,"totalPostCount":252467,"totalTopicCount":10870,"tagWhitelist":[],"unread-class":"unread"},"posts":[{"pid":2625254,"timestamp":1790342333607,"content":"Meine Erfahrung mit aktuellen Premiummodellen ist immer noch, dass man ihnen selbstständig bloß Juniorentwickleraufgaben geben kann, wo man dann hinterher auch nochmals gründlich drübergucken muss. Dabei wird es immer schwieriger die Fehler zu finden, aber es sind immer noch zu häufig grobe Böcke drin, als dass ich dem ungesehen vertrauen würde. Und halt stets so zuversichtlich, wo dann am Code kommentiert ist, was das machen soll, aber erst wenn man 3x guckt, merkt man, das stimmt gar nicht. Das ist dann besonders gefährlich, weil man nicht bloß querlesen kann, ob etwas sinnvoll aussieht, sondern man muss es wirklich komplett durchdenken, ob das stimmt. Wenn man dann auf die Fehler zeigt, tendieren sie auch dazu, Dinge kaputt zu reparieren. Das ist dann vergleichbar viel Aufwand wie selber schreiben.\nUmgekehrt ist es hingegen höchst nützlich, wenn man sie benutzt, um den eigenen Code zu kritisieren. Da kann man dann ja schnell beurteilen, ob ein Einwand gerechtfertigt ist oder ob ein Verbesserungsvorschlag wirklich besser ist. Da bekommt man schneller viel mehr nützliche Vorschläge und Einwände als selbst der kritischte Reviewer einem geben könnte. Wenn davon dann nicht alle gerechtfertigt sind, ist das ja nicht weiter schlimm, man muss sie ja nicht umsetzen. Das finde ich schon sehr hilfreich und will ich nicht mehr vermissen.\nWas auch geht sind Fleißaufgaben so a la &quot;Mit diesem (von mir geschriebenen) Test als Vorbild schreibe weitere Tests für folgende Szenarien [...] und mach Vorschläge für was noch fehlen könnte&quot;
1283. Muss man auch nochmal draufgucken, aber da ist es dann auch nicht so kritisch, und die Chancen, dass es falsch ist, sind kleiner.\n","timestampISO":"2026-09-25T13:18:53.607Z","user":{"username":"SeppJ","userslug":"seppj","picture":"/forum/assets/uploads/profile/19375-profileavatar.png","icon:text":"S","icon:bgColor":"#009688"},"index":39,"cid":77,"parentCid":72,"topic":{"slug":"355420/pro-contra-ki-eigene-erfahrungen","title":"Pro &amp; Contra KI - Eigene Erfahrungen"}}]},{"bgColor":"#575757","cid":70,"class":"col-md-3 col-xs-6","color":"#fff","description":"Treffpunkt der Gamer. Diskussionen über neue und alte Spiele. Organisation von Turnieren oder finde Mitspieler bei deinem Lieblingsspiel.","descriptionParsed":"<p>Treffpunkt der Gamer. Diskussionen über neue und alte Spiele. Organisation von Turnieren oder finde Mitspieler bei deinem Lieblingsspiel.<\/p>\n","disabled":0,"icon":"hidden","imageClass":"cover","link":"","name":"Gaming-Corner","numRecentReplies":1,"order":4,"parentCid":72,"post_count":13951,"slug":"70/gaming-corner","topic_count":831,"isSection":0,"totalPostCount":13951,"totalTopicCount":831,"tagWhitelist":[],"unread-class":"unread","children":[],"parent":{"bgColor":"#949494","cid":72,"class":"col-md-3 col-xs-6","color":"#fff","description":"Informationen aus der realen Welt, Fragen nach Uhrzeit und Wetter, heiße Aktientipps und allgemeines Gelaber sowie Austragungsort für ernstgemeinte Diskussionsduelle. Alles was nichts mehr mit Programmierung zu tun hat.","descriptionParsed":"<p>Informationen aus der realen Welt, Fragen nach Uhrzeit und Wetter, heiße Aktientipps und allgemeines Gelaber sowie Austragungsort für ernstgemeinte Diskussionsduelle. Alles was nichts mehr mit Programmierung zu tun hat.<\/p>\n","disabled":0,"icon":"fa-comments-o","imageClass":"cover","link":"","name":"Jenseits der Programmierung","numRecentReplies":1,"order":7,"parentCid":0,"post_count":252467,"slug":"72/jenseits-der-programmierung","topic_count":10870,"isSection":0,"totalPostCount":252467,"totalTopicCount":10870,"tagWhitelist":[],"unread-class":"unread"},"posts":[{"pid":2625035,"timestamp":1785140530665,"content":"I'm currently playing Space Engineers 2 and The Guild 3 - until the new Guild comes out. \n","timestampISO":"2026-07-27T08:22:10.665Z","user":{"username":"Anon-81275","userslug":"anon-81275","picture":"","icon:text":"A","icon:bgColor":"#3f51b5"},"index":2,"cid":70,"parentCid":72,"topic":{"slug":"355478/looking-for-new-pc-game-recommendations","title":"Looking for New PC Game Recommendations"}}]}],"posts":[{"pid":2625254,"timestamp":1790342333607,"content":"Meine Erfahrung mit aktuellen Premiummodellen ist immer noch, dass man ihnen selbstständig bloß Juniorentwickleraufgaben geben kann, wo man dann hinterher auch nochmals gründlich drübergucken muss. Dabei wird es immer schwieriger die Fehler zu finden, aber es sind immer noch zu häufig grobe Böcke drin, als dass ich dem ungesehen vertrauen würde. Und halt stets so zuversichtlich, wo dann am Code kommentiert ist, was das machen soll, aber erst wenn man 3x guckt, merkt man, das stimmt gar nicht. Das ist dann besonders gefährlich, weil man nicht bloß querlesen kann, ob etwas sinnvoll aussieht, sondern man muss es wirklich komplett durchdenken, ob das stimmt. Wenn man dann auf die Fehler zeigt, tendieren sie auch dazu, Dinge kaputt zu reparieren. Das ist dann vergleichbar viel Aufwand wie selber schreiben.\nUmgekehrt ist es hingegen höchst nützlich, wenn man sie benutzt, um den eigenen Code zu kritisieren. Da kann man dann ja schnell beurteilen, ob ein Einwand gerechtfertigt ist oder ob ein Verbesserungsvorschlag wirklich besser ist. Da bekommt man schneller viel mehr nützliche Vorschläge und Einwände als selbst der kritischte Reviewer einem geben könnte. Wenn davon dann nicht alle gerechtfertigt sind, ist das ja nicht weiter schlimm, man muss sie ja nicht umsetzen. Das finde ich schon sehr hilfreich und will ich nicht mehr vermissen.\nWas auch geht sind Fleißaufgaben so a la &quot;Mit diesem (von mir geschriebenen) Test als Vorbild schreibe weitere Tests für folgende Szenarien [...] und mach Vorschläge für was noch fehlen könnte&quot;
1283. Muss man auch nochmal draufgucken, aber da ist es dann auch nicht so kritisch, und die Chancen, dass es falsch ist, sind kleiner.\n","timestampISO":"2026-09-25T13:18:53.607Z","user":{"username":"SeppJ","userslug":"seppj","picture":"/forum/assets/uploads/profile/19375-profileavatar.png","icon:text":"S","icon:bgColor":"#009688"},"index":39,"cid":77,"parentCid":72,"topic":{"slug":"355420/pro-contra-ki-eigene-erfahrungen","title":"Pro &amp; Contra KI - Eigene Erfahrungen"}}],"teaser":{"url":"/forum/post/2625254","timestampISO":"2026-09-25T13:18:53.607Z","pid":2625254,"topic":{"slug":"355420/pro-contra-ki-eigene-erfahrungen","title":"Pro &amp; Contra KI - Eigene Erfahrungen"}}},{"bgColor":"#f7ca88","cid":35,"class":"col-md-3 col-xs-6","color":"#333333","description":"Hier kann man über die neue Forumsoftware diskutieren.\r\nKritik, Lob, Probleme, Lösungen usw.","descriptionParsed":"<p>Hier kann man über die neue Forumsoftware diskutieren.<br />\nKritik, Lob, Probleme, Lösungen usw.<\/p>\n","disabled":0,"icon":"fa-cogs","imageClass":"cover","link":"","name":"Forentechnik","numRecentReplies":1,"order":8,"parentCid":0,"post_count":15005,"slug":"35/forentechnik","topic_count":1750,"isSection":0,"totalPostCount":15005,"totalTopicCount":1750,"tagWhitelist":[],"unread-class":"unread","children":[],"posts":[{"pid":2625111,"timestamp":1787149409522,"content":"Wenn ihr die Richtigkeit meiner Aussage weiter anzweifelt, könnte ich ja mal die Gegenfrage stellen, welche Unterschiede ihr denn zwischen Rassist und Nazi seht... Aber ich glaube, das wäre tatsächlich der Diskussion nicht förderlich. Also lasst die Beleidigungen doch einfach.\n","timestampISO":"2026-08-19T14:23:29.522Z","user":{"username":"Anon-81275","userslug":"anon-81275","picture":"","icon:text":"A","icon:bgColor":"#3f51b5"},"index":25,"cid":35,"parentCid":0,"topic":{"slug":"355486/ab-wann-kann-man-postings-bewerten","title":"Ab wann kann man Postings bewerten?"}}],"teaser":{"url":"/forum/post/2625111","timestampISO":"2026-08-19T14:23:29.522Z","pid":2625111,"topic":{"slug":"355486/ab-wann-kann-man-postings-bewerten","title":"Ab wann kann man Postings bewerten?"}}}],"loggedIn":false,"relative_path":"/forum","template":{"name":"categories","categories":true},"url":"/forum/categories","bodyClass":"page-categories page-status-200","widgets":{"footer":[{"html":"<footer id=\"footer\" class=\"container footer\"><div>\r\n<a href=\"/datenschutz.html\">Datenschutz<\/a> | <a target=\"_blank\" href=\"/impressum.html\">Impressum<\/a>\r\n<\/div><div>\r\nPowered by <a target=\"_blank\" href=\"https://nodebb.org\">NodeBB<\/a> | <a target=\"_blank\" href=\"//github.com/NodeBB/NodeBB/graphs/contributors\">Contributors<\/a><\/div>\r\n<\/footer>"}]}}</script>
1283		</div><!-- /.container#content -->
1284	</main>
1285	
1286
1287
1288	
1288<script defer src="/forum/assets/nodebb.min.js?v=ab1pehoraso"></script>
1288
1289
1290	
1291	
1291<script defer type="text/javascript" src="/forum/assets/vendor/jquery/timeago/locales/jquery.timeago.en.js"></script>
1291
1292	
1293
1294	
1294<script>
1295		window.addEventListener('load', function () {
1296			require(['forum/footer']);
1297
1298			
1299		});
1300	</script>
1300
1301
1302	<div class="hide">
1303	
1303<script>
1304	window.addEventListener('load', function () {
1305		define(config.relative_path + '/assets/templates/500.js', function () {
1306			function compiled(helpers, context, get, iter, helper) {
1307				return '<div class="alert alert-danger">\n\t<strong>Internal Error.</strong>\n\t<p>Oops! Looks like something went wrong!</p>\n\t<p>' + 
1308					helpers.__escape(get(context && context['path'])) + '</p>\n\t' + 
1309					(get(context && context['error']) ? '<p>' + helpers.__escape(get(context && context['error'])) + '</p>' : '') + '\n\n\t' + 
1310					(get(context && context['returnLink']) ? '\n\t<p>Press back to return to the previous page</p>\n\t' : '') + '\n</div>\n';
1311			}
1312
1313			return compiled;
1314		});
1315	});
1316</script>
1316
1317	</div>
1318</body>
1319</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.