亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? cparbiter.c

?? Compressed file has password
?? C
字號(hào):
/* 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. */ #include <stdlib.h>#include <math.h>#include "chipmunk.h"cpFloat cp_bias_coef = 0.1f;cpFloat cp_collision_slop = 0.1f;cpContact*cpContactInit(cpContact *con, cpVect p, cpVect n, cpFloat dist, unsigned int hash){	con->p = p;	con->n = n;	con->dist = dist;		con->jnAcc = 0.0f;	con->jtAcc = 0.0f;	con->jBias = 0.0f;		con->hash = hash;			return con;}cpVectcpContactsSumImpulses(cpContact *contacts, int numContacts){	cpVect sum = cpvzero;		for(int i=0; i<numContacts; i++){		cpContact *con = &contacts[i];		cpVect j = cpvmult(con->n, con->jnAcc);		sum = cpvadd(sum, j);	}			return sum;}cpVectcpContactsSumImpulsesWithFriction(cpContact *contacts, int numContacts){	cpVect sum = cpvzero;		for(int i=0; i<numContacts; i++){		cpContact *con = &contacts[i];		cpVect t = cpvperp(con->n);		cpVect j = cpvadd(cpvmult(con->n, con->jnAcc), cpvmult(t, con->jtAcc));		sum = cpvadd(sum, j);	}			return sum;}cpArbiter*cpArbiterAlloc(void){	return (cpArbiter *)calloc(1, sizeof(cpArbiter));}cpArbiter*cpArbiterInit(cpArbiter *arb, cpShape *a, cpShape *b, int stamp){	arb->numContacts = 0;	arb->contacts = NULL;		arb->a = a;	arb->b = b;		arb->stamp = stamp;			return arb;}cpArbiter*cpArbiterNew(cpShape *a, cpShape *b, int stamp){	return cpArbiterInit(cpArbiterAlloc(), a, b, stamp);}voidcpArbiterDestroy(cpArbiter *arb){	free(arb->contacts);}voidcpArbiterFree(cpArbiter *arb){	if(arb) cpArbiterDestroy(arb);	free(arb);}voidcpArbiterInject(cpArbiter *arb, cpContact *contacts, int numContacts){	// Iterate over the possible pairs to look for hash value matches.	for(int i=0; i<arb->numContacts; i++){		cpContact *old = &arb->contacts[i];				for(int j=0; j<numContacts; j++){			cpContact *new_contact = &contacts[j];						// This could trigger false possitives.			if(new_contact->hash == old->hash){				// Copy the persistant contact information.				new_contact->jnAcc = old->jnAcc;				new_contact->jtAcc = old->jtAcc;			}		}	}	free(arb->contacts);		arb->contacts = contacts;	arb->numContacts = numContacts;}voidcpArbiterPreStep(cpArbiter *arb, cpFloat dt_inv){	cpShape *shapea = arb->a;	cpShape *shapeb = arb->b;			cpFloat e = shapea->e * shapeb->e;	arb->u = shapea->u * shapeb->u;	arb->target_v = cpvsub(shapeb->surface_v, shapea->surface_v);	cpBody *a = shapea->body;	cpBody *b = shapeb->body;		for(int i=0; i<arb->numContacts; i++){		cpContact *con = &arb->contacts[i];				// Calculate the offsets.		con->r1 = cpvsub(con->p, a->p);		con->r2 = cpvsub(con->p, b->p);				// Calculate the mass normal.		cpFloat mass_sum = a->m_inv + b->m_inv;				cpFloat r1cn = cpvcross(con->r1, con->n);		cpFloat r2cn = cpvcross(con->r2, con->n);		cpFloat kn = mass_sum + a->i_inv*r1cn*r1cn + b->i_inv*r2cn*r2cn;		con->nMass = 1.0f/kn;				// Calculate the mass tangent.		cpVect t = cpvperp(con->n);		cpFloat r1ct = cpvcross(con->r1, t);		cpFloat r2ct = cpvcross(con->r2, t);		cpFloat kt = mass_sum + a->i_inv*r1ct*r1ct + b->i_inv*r2ct*r2ct;		con->tMass = 1.0f/kt;						// Calculate the target bias velocity.		con->bias = -cp_bias_coef*dt_inv*cpfmin(0.0f, con->dist + cp_collision_slop);		con->jBias = 0.0f;				// Calculate the target bounce velocity.		cpVect v1 = cpvadd(a->v, cpvmult(cpvperp(con->r1), a->w));		cpVect v2 = cpvadd(b->v, cpvmult(cpvperp(con->r2), b->w));		con->bounce = cpvdot(con->n, cpvsub(v2, v1))*e;	}}voidcpArbiterApplyCachedImpulse(cpArbiter *arb){	cpShape *shapea = arb->a;	cpShape *shapeb = arb->b;			arb->u = shapea->u * shapeb->u;	arb->target_v = cpvsub(shapeb->surface_v, shapea->surface_v);	cpBody *a = shapea->body;	cpBody *b = shapeb->body;		for(int i=0; i<arb->numContacts; i++){		cpContact *con = &arb->contacts[i];				cpVect t = cpvperp(con->n);		cpVect j = cpvadd(cpvmult(con->n, con->jnAcc), cpvmult(t, con->jtAcc));		cpBodyApplyImpulse(a, cpvneg(j), con->r1);		cpBodyApplyImpulse(b, j, con->r2);	}}voidcpArbiterApplyImpulse(cpArbiter *arb, cpFloat eCoef){	cpBody *a = arb->a->body;	cpBody *b = arb->b->body;	for(int i=0; i<arb->numContacts; i++){		cpContact *con = &arb->contacts[i];		cpVect n = con->n;		cpVect r1 = con->r1;		cpVect r2 = con->r2;				// Calculate the relative bias velocities.		cpVect vb1 = cpvadd(a->v_bias, cpvmult(cpvperp(r1), a->w_bias));		cpVect vb2 = cpvadd(b->v_bias, cpvmult(cpvperp(r2), b->w_bias));		cpFloat vbn = cpvdot(cpvsub(vb2, vb1), n);				// Calculate and clamp the bias impulse.		cpFloat jbn = (con->bias - vbn)*con->nMass;		cpFloat jbnOld = con->jBias;		con->jBias = cpfmax(jbnOld + jbn, 0.0f);		jbn = con->jBias - jbnOld;				// Apply the bias impulse.		cpVect jb = cpvmult(n, jbn);		cpBodyApplyBiasImpulse(a, cpvneg(jb), r1);		cpBodyApplyBiasImpulse(b, jb, r2);		// Calculate the relative velocity.		cpVect v1 = cpvadd(a->v, cpvmult(cpvperp(r1), a->w));		cpVect v2 = cpvadd(b->v, cpvmult(cpvperp(r2), b->w));		cpVect vr = cpvsub(v2, v1);		cpFloat vrn = cpvdot(vr, n);				// Calculate and clamp the normal impulse.		cpFloat jn = -(con->bounce*eCoef + vrn)*con->nMass;		cpFloat jnOld = con->jnAcc;		con->jnAcc = cpfmax(jnOld + jn, 0.0f);		jn = con->jnAcc - jnOld;				// Calculate the relative tangent velocity.		cpVect t = cpvperp(n);		cpFloat vrt = cpvdot(cpvadd(vr, arb->target_v), t);				// Calculate and clamp the friction impulse.		cpFloat jtMax = arb->u*con->jnAcc;		cpFloat jt = -vrt*con->tMass;		cpFloat jtOld = con->jtAcc;		con->jtAcc = cpfclamp(jtOld + jt, -jtMax, jtMax);		jt = con->jtAcc - jtOld;				// Apply the final impulse.		cpVect j = cpvadd(cpvmult(n, jn), cpvmult(t, jt));		cpBodyApplyImpulse(a, cpvneg(j), r1);		cpBodyApplyImpulse(b, j, r2);	}}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜影视日本亚洲欧洲精品| 精品亚洲欧美一区| 久久女同互慰一区二区三区| 91丨porny丨首页| 国产精品羞羞答答xxdd| 天堂va蜜桃一区二区三区漫画版| 久久久国际精品| 欧美二区三区的天堂| 91小视频在线| 国产激情一区二区三区| 日韩国产精品91| 亚洲午夜精品一区二区三区他趣| 国产女主播一区| 欧美变态口味重另类| 欧美日韩综合一区| 色8久久精品久久久久久蜜| 福利91精品一区二区三区| 精品一区二区三区视频在线观看| 亚洲一区二区三区中文字幕| 亚洲天堂av一区| 中文字幕av一区 二区| 久久综合中文字幕| 精品区一区二区| 欧美丰满美乳xxx高潮www| 欧美影视一区在线| 在线观看国产91| 欧美精品tushy高清| 91国在线观看| 在线观看日韩国产| 色综合色综合色综合色综合色综合| 国产高清视频一区| 国产精品资源在线观看| 国产精品一区二区黑丝| 国产剧情一区在线| 国产精品77777| 国产成人av一区| 成人性生交大合| 懂色av噜噜一区二区三区av| 高清av一区二区| 北条麻妃一区二区三区| 成人av在线资源| 91捆绑美女网站| 日本韩国视频一区二区| 欧美性大战久久| 欧美日韩aaa| 欧美一区二区免费| 精品国产亚洲一区二区三区在线观看| 日韩欧美电影一二三| 精品国产精品一区二区夜夜嗨| 精品国产乱码久久久久久浪潮| 精品国免费一区二区三区| 久久综合资源网| 国产精品久久久久国产精品日日| 亚洲欧洲成人精品av97| 亚洲一二三四在线| 免费久久精品视频| 国产激情精品久久久第一区二区| 成人av在线网站| 色婷婷激情综合| 欧美丰满美乳xxx高潮www| 欧美一级高清大全免费观看| 久久精品视频免费观看| 国产精品久久久久久久久晋中| 亚洲精品免费播放| 日韩高清在线电影| 国产精品456露脸| 在线观看日产精品| 日韩欧美另类在线| 欧美韩国日本不卡| 亚洲第一综合色| 国产一区二区三区免费看| 99久久精品国产一区| 久久精品亚洲精品国产欧美| 国产精品超碰97尤物18| 午夜精品久久久久久久久| 国产成人免费9x9x人网站视频| 色嗨嗨av一区二区三区| 日韩精品一区二区三区四区视频| 国产精品久久久久影院色老大| 亚洲午夜一二三区视频| 国产高清在线精品| 欧美日韩亚洲国产综合| 国产女主播视频一区二区| 亚洲午夜一区二区| 盗摄精品av一区二区三区| 欧美日韩国产中文| 中文在线资源观看网站视频免费不卡| 一区二区免费看| 国产91高潮流白浆在线麻豆| 欧美日韩精品一区二区三区蜜桃| 久久精品视频一区二区| 五月婷婷欧美视频| 成人午夜av电影| 日韩欧美一区二区久久婷婷| 亚洲乱码国产乱码精品精可以看| 另类小说色综合网站| 色94色欧美sute亚洲线路一ni | 香蕉久久一区二区不卡无毒影院| 九九国产精品视频| 欧洲激情一区二区| 国产精品情趣视频| 精品亚洲成av人在线观看| 欧美日免费三级在线| 中文字幕一区二区三区蜜月| 免费av网站大全久久| 欧美性色黄大片| 最新久久zyz资源站| 国产精品一区二区你懂的| 欧美一级二级三级乱码| 亚洲国产视频一区二区| 色综合视频一区二区三区高清| 亚洲二区视频在线| 91美女在线观看| 国产精品国产三级国产普通话蜜臀| 麻豆国产精品官网| 91精品国产免费| 日韩精品一级中文字幕精品视频免费观看 | 亚洲女与黑人做爰| av电影在线不卡| 国产精品久久三| 成人黄色免费短视频| 中文无字幕一区二区三区| 国产资源精品在线观看| 欧美草草影院在线视频| 免费看日韩a级影片| 91精品国产综合久久精品性色| 亚洲狠狠爱一区二区三区| 在线一区二区视频| 亚洲综合小说图片| 欧美羞羞免费网站| 亚洲专区一二三| 欧美三级日韩三级国产三级| 一级特黄大欧美久久久| 欧美天堂一区二区三区| 亚洲福利一区二区三区| 3atv在线一区二区三区| 奇米精品一区二区三区在线观看一| 欧美一区二区三区视频在线 | 日本一区中文字幕| 6080亚洲精品一区二区| 青草av.久久免费一区| 日韩美女主播在线视频一区二区三区| 奇米影视一区二区三区| 欧美成人一区二区三区在线观看| 久久国产婷婷国产香蕉| 久久久久青草大香线综合精品| 国产精品一区二区无线| 国产精品久久久久久久岛一牛影视 | 91亚洲国产成人精品一区二三 | 久久婷婷国产综合国色天香| 国内不卡的二区三区中文字幕| 久久久久久久综合色一本| 成人涩涩免费视频| 伊人一区二区三区| 日韩一区二区在线观看| 国产二区国产一区在线观看| 亚洲欧洲一区二区在线播放| 色av一区二区| 美女一区二区视频| 欧美日韩综合在线| 精品在线一区二区三区| 中文字幕一区在线观看视频| 欧美丝袜自拍制服另类| 经典三级一区二区| 国产精品久久久久久久久快鸭 | 国产99久久久国产精品潘金| 亚洲色欲色欲www在线观看| 精品1区2区3区| 国产精品白丝av| 亚洲一区二区三区影院| 精品乱码亚洲一区二区不卡| 99这里只有精品| 日韩在线观看一区二区| 日本一区二区三区电影| 欧美日韩成人一区| 国产成人一级电影| 亚洲国产欧美日韩另类综合| 日韩欧美国产一区在线观看| av网站免费线看精品| 免费看欧美女人艹b| 亚洲日穴在线视频| 日韩欧美国产电影| 在线观看视频91| 国产精品77777竹菊影视小说| 亚洲一二三四区| 国产精品久久久久国产精品日日| 在线播放日韩导航| av在线不卡免费看| 日本人妖一区二区| 一区二区三区加勒比av| 国产亚洲制服色| 日韩视频中午一区| 欧洲亚洲国产日韩| 成人黄色软件下载| 国产在线一区观看| 蜜桃精品视频在线| 亚洲二区在线视频| 亚洲男人的天堂在线观看| 国产欧美中文在线| 日韩美女一区二区三区四区|