📄 cpvect.h
字号:
/* Copyright (c) 2007 Scott Lembcke * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ typedef struct cpVect{ cpFloat x,y;} cpVect;static const cpVect cpvzero={0.0f,0.0f};static inline cpVectcpv(const cpFloat x, const cpFloat y){ cpVect v = {x, y}; return v;}static inline cpVectcpvadd(const cpVect v1, const cpVect v2){ return cpv(v1.x + v2.x, v1.y + v2.y);}static inline cpVectcpvneg(const cpVect v){ return cpv(-v.x, -v.y);}static inline cpVectcpvsub(const cpVect v1, const cpVect v2){ return cpv(v1.x - v2.x, v1.y - v2.y);}static inline cpVectcpvmult(const cpVect v, const cpFloat s){ return cpv(v.x*s, v.y*s);}static inline cpFloatcpvdot(const cpVect v1, const cpVect v2){ return v1.x*v2.x + v1.y*v2.y;}static inline cpFloatcpvcross(const cpVect v1, const cpVect v2){ return v1.x*v2.y - v1.y*v2.x;}static inline cpVectcpvperp(const cpVect v){ return cpv(-v.y, v.x);}static inline cpVectcpvrperp(const cpVect v){ return cpv(v.y, -v.x);}static inline cpVectcpvproject(const cpVect v1, const cpVect v2){ return cpvmult(v2, cpvdot(v1, v2)/cpvdot(v2, v2));}static inline cpVectcpvrotate(const cpVect v1, const cpVect v2){ return cpv(v1.x*v2.x - v1.y*v2.y, v1.x*v2.y + v1.y*v2.x);}static inline cpVectcpvunrotate(const cpVect v1, const cpVect v2){ return cpv(v1.x*v2.x + v1.y*v2.y, v1.y*v2.x - v1.x*v2.y);}cpFloat cpvlength(const cpVect v);cpFloat cpvlengthsq(const cpVect v); // no sqrt() callcpVect cpvnormalize(const cpVect v);cpVect cpvforangle(const cpFloat a); // convert radians to a normalized vectorcpFloat cpvtoangle(const cpVect v); // convert a vector to radianschar *cpvstr(const cpVect v); // get a string representation of a vector
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -