void LinearBody::UpdateForces()
{
	// BOOKKEEPING
	// Clean up from last force calculation and precalculate some helpful values
	f_clear();
	// Precalculate some helpful values into obect-wide variables
	f_precalc();

	// FORCE APPLICATORS
	fa_linearSprings();
	fa_torques();
	fa_drag();
	fa_friction();

	// SET ACCELERATION GIVEN NEW FORCES: a = f/m
	for (ALLNODES_i) {
		nodes[i].a.x = (nodes[i].ff.x + nodes[i].fd.x + nodes[i].ft.x + nodes[i].fs.x)/nodeMass;
		nodes[i].a.y = (nodes[i].ff.y + nodes[i].fd.y + nodes[i].ft.y + nodes[i].fs.y)/nodeMass;
	}

}
Esempio n. 2
0
main(int argc, char *argv[])
{
        FILE* out;
        FILE* pack;
        s_main_head mhead;
        s_pack_head phead;
        s_file_rec rec[20];
        s_file_rec frec;
        t_dword len, cksum=0, i=0,j;
        f_clear(&mhead,sizeof(s_main_head));
        f_clear(&phead,sizeof(s_pack_head));
        f_clear(rec,sizeof(s_file_rec)*20);
        
        
        if (argc < 2)
                printf("eospack outfile [firm version]");
        if (argc > 2)
                strcpy(mhead.version,	argv[2]);
        else
                strcpy(mhead.version,	"eos test firm1");
                
        if ((out = fopen(argv[1], "wb")) == NULL) {
                printf("Cant't open file name %s\n", argv[1]);
                exit(-1);
        }
        
        if ((pack = fopen("tmp.pack", "wb+")) == NULL) {
                printf("Cant't open file name tmp.pack\n");
                exit(-1);
        }

        printf("File to write: %s\n", argv[1]);
        printf("Writing pack\n");
        
        cksum = 0;
        if (f_add(&cksum, &(rec[i]), pack, 8, "firm", "MAIN_FIRMWARE")) i++;
        if (f_add(&cksum, &(rec[i]), pack, 8, "ver", "FirmwareVersion")) i++;
        fseek(pack, 0, SEEK_SET);
        
        phead.tableOffset = sizeof(s_pack_head);
        phead.rec_num = i;
        phead.tableLenght = i*sizeof(s_file_rec);
        phead.packOffset = phead.tableLenght+phead.tableOffset;
        for (j=0; j<i; j++)
        { 
          rec[j].Offset = phead.packLenght + phead.packOffset;
          phead.packLenght += rec[j].lenght;
          cksum += f_cksum(&(rec[j]), sizeof(s_file_rec));
        }
        phead.cksum = CK(cksum + f_cksum(&phead,sizeof(s_pack_head)));
        
        printf("Writing main\n");
        
        cksum=0;
        len=0;

        mhead.modelID=	0x80000236;
        mhead.cksum= 	0x00000000;
        mhead.firstOffset = sizeof(s_main_head);
        
        fwrite(&mhead, sizeof(s_main_head), 1, out);
        
        len =f_add(&cksum, &frec, out, 0, "loader", "LOADER");
        mhead.secondOffset = mhead.firstOffset + len;
        
        fwrite (&phead, sizeof(s_pack_head), 1, out);
        fwrite (rec, sizeof(s_file_rec), phead.rec_num, out);
        cksum += f_filecpy(&frec, out, pack);        
        
        mhead.cksum = CK(cksum + 
          f_cksum(&mhead, sizeof(s_main_head)) + 
          f_cksum(&phead, sizeof(s_pack_head)) +
          f_cksum(rec, sizeof(s_file_rec)*phead.rec_num));
        
        fseek(out, 0, SEEK_SET);
        fwrite(&mhead, sizeof(s_main_head), 1, out);
        
        fclose(pack);        
        fclose(out);

        exit(0);
}