Cmath3d
3d math library for C. Vectors, 3x3 matrices, quaternions, polytopes.
Install / Use
/learn @jpreiss/Cmath3dREADME
cmath3d
3d math library for C. Vectors, 3x3 matrices, quaternions. 32-bit floats.
motivation
This library is intended for embedded projects where C++ is not used. In the author's opinion, C++'s feature set enables dramatically more readable 3d math code. However, many embedded projects stick with C by necessity or preference. The goal of this project is to create the best possible programmer experience within the constraints of C syntax. If cmath3d is missing something you need, feature requests are encouraged.
design choices
Unlike many other C libraries of this type, cmath3d passes arguments
and returns results by value instead of by pointer and pointer-to-output.
This choice has several motivations:
- avoids the need to name non-meaningful intermediate results for the sake of taking their address
- enables nested expressions
- reduces bugs by allowing more variables to be declared
const - gives the optimizing compiler complete knowledge about function semantics, theoretically enabling better optimizations (see Chandler Carruth's talk)
Although Carruth's talk implies that using these functions with inline, header-only definitions -- thus hiding no code from the compiler in external object files -- will enable as good or better optimizations than a pass-by-pointer version, in practice this library seems to consume more stack memory than it should. I am currently researching ways to fix this problem, since I believe a SSA compiler with the ability to destructure structs should produce optimal code from this library.
note for users
If you use cmath3d in your project,
I would very much appreciate it if you leave a comment in #2.
Related Skills
node-connect
349.9kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
109.8kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
349.9kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
349.9kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
