Calculating the gravity of the gravitational force or 0.00000000000667

Calculating the gravity of the gravitational force or 0.00000000000667

onedayitwillmake No Comments
  math snippet sourcecode

Gravity is by far the best force in the universe. Despite being the weakest of the “main” four (strong nuclear force, weak nuclear force, electromagnetism, gravity). It is the one that dominates given enough time and distances. All this even though it falls of inversely to the square of the distance, meaning, if you double the separation between the two objects you quarter the force, or if you cut the separation in half you quadruple the force of attraction.

It’s also one of my favorite things when creating visualizations, because things move so beautifully when you simply let gravity take over.

So I thought I would give it it’s own tiny blog post, in honor of its value 0.00000000000667

    // Compute the net force acting between the invoking body a and b, and
    // add to the net force acting on the invoking Body
    public void addForce(Body b) {
        Body a = this;
        double G = 0.00000000000667;
        double EPS = 0.0001;      // softening parameter
        double dx = b.rx - a.rx;
        double dy = b.ry - a.ry;
        double dist = Math.sqrt(dx*dx + dy*dy);
        double F = (G * a.mass * b.mass) / (dist*dist + EPS*EPS);
        a.fx += F * dx / dist;
        a.fy += F * dy / dist;
    }

Eclipse template project with cocos2dx

onedayitwillmake No Comments
  C++ eclipse gamedev Howto

I have created an eclipse project template, which contains an SDK project, with a NDK C++ bindings ( done via ‘javah’ build step ), combined with Cocos2dx helloworld project.
I have used it as the base for 2 projects, and figured I would share.

https://github.com/onedayitwillmake/EclipseAndroid_NDK_SDK/tree/cocos2dx

 

Using EclipseLovesCinder template

onedayitwillmake No Comments
  C++ C++11 cinder eclipse

About a year ago, I created a template to use the Cinder framework within Eclipse. I still use it all the time, as I still find Eclipse a better C++ editor (although xcode is slowly catching up if you use the compile and use the latest LLVM). I recently decided to revisit it and update it to better fit the workflow I prefer, and fix issues I’ve over time found work arounds for.

With that I decided that it was time to give some new instructions so here they are. I’ll revisit this post with more details, but if pictures are a 1000 words this is a pretty big post.

Better Eclipse Icon for Android Development

onedayitwillmake one comments
  C++

Every time I setup eclipse for a new computer, new OS install, or decide to use it for a different language/platform I find myself recreating the icon for it. This usually occurs at the VERY beginning of the affair with a new whatever, so I have plenty of energy and really want to get off on the right foot. It’s kind of part of the fun.

C++11 in Eclipse CDT Part 1 – Getting and Installing GCC4.7

onedayitwillmake one comments
  C++ C++11 Howto

This is the second part of a three part series on using C++0x11 on OSX via Eclipse. If you need a little bit more nudging, you might want to look at Part0 of this series, where I make the case that the Langauge is moving in this direction and as such does not make sense for us to use older outdated tools.

In this post I’ll discuss the process of getting and installing the GCC4.7 compiler. First we need to arm our computer with the right tools.

We’ll be configuring and installing the following tools:

  • Macports: A tool for configuring / building / installing  tools, binaries, etc from terminal on OSX similar to ports or apt-get
  • Xcode 4.2+ : Required for above
  • Xcode 4.2+ Command Line Support: Required to build macports
  • Eclipse CDT: Our editor

C++0x11 + OSX + Eclipse: Part 0 – The Why

onedayitwillmake 3 comments
  C++11 eclipse

I use Eclipse CDT as my C++ editor of choice on my Mac at work and at Home.
It’s really a very good editor for C++. Xcode, is a decent editor. When doing iphone / mac OSX projects with Objective-C its an amazing editor. However it is very bad at C++, in my opinion Xcode 4 is much worse than Xcode 3 at C++ code editing.

Is it a conspiracy to nudge developers towards developing using (basically) Apple’s own Objective-C programming language? Maybe I’m not sure, however I do love Objective-C, it’s my second and sometimes first favorite programing language, behind only C++.

To be honest it’s probably not, since they support the Clang+LLVM project which supports C++11, in fact it supports more features than GCC4.7 and is a faster compiler.

C++ has matured so much in the last few years, and a large part of that is due to the Boost libraries. In fact Boost, is sort of used as a testing ground for C++ – and many parts of C++0x11 started off as Boost Libraries ( for-each, any containers, lambdas, smart pointers, thread ).

As an OSX affectionato, I have to admit that I was upset that my latest version of OSX ( Lion at the time of writing ) was using GCC 4.2… GCC 4.2.1 is from July 2007!. The compiler and accompanying library is over 5 years old! In computer years, from what I sophisticatedly computed, thats 1 zillion years ago. That doesn’t seem right… Apple is defineintly making amzing strides with LLVM+Clang compiler, it’s actually better and faster than the latest GCC (4.7 at time of writing), however Xcode is such aTERRIBLE C++ editor, often not providing auto-complete, and not being able to find references until upto a minute after click. One minute? That’s crazy.

Hearing all this talk about how great C++0x11 was, I wanted to use it. To be honest, a lot of the stuff can be faked using the amazing Boost libraries – some of which are now standard. However I felt ripped off, these are officially part of C++ I should be able to use them now right!? Well not on OSX you can’t – well at least not without a little bit of work.

BulletML running on iOS

onedayitwillmake No Comments
  gamedev preview sourcecode

BulletML is an XML like markup language created to describe bullet barrages seen in shooters. It allows you to describe complex bullet patterns in simple XML files, then parse them and let it run. Very easy to create nice boss patterns

In this video is my first working attempt at getting it to run on the iPhone. Currently bullets can not spawn other bullets, but once I get that i’ll share the source

It runs at 60FPS, but the screen recorder drops some frames.

Project:
https://github.com/onedayitwillmake/BulletHaven

I’ve managed to get BulletML and cocos2d to work together.
Most of the bulletml files work, except for when bullets need to spawn other bullets.

Does anyone have any experience with this, perhaps it’s a callback function that needs to be inside of bullet?

NaiveEmitter reacting to music

onedayitwillmake No Comments
  C++11 cinder

Test using my simple (NaiveEmitter) reacting to music and testing a borrowed projector.

Adventure from mario gonzalez on Vimeo.

Video of 2.5D Javascript/WebGL PortalGun

onedayitwillmake No Comments
  chuclone gamedev preview

I’m in the middle of adding a Portal gun to chuclone – There are still a few kinks in it, namely related to determining the side of the object the Portal gun hits, and converting the 3D position of your shot into 2D cordinates so that it shoots exactly where you aimed. However I have it far along enough to show a video of it in action!

Here you can see me messing around with the gun, as well as trying out a couple of simple level ideas that come with it.
Mostly the momentum based puzzles, as those were my favorite in Portal. However I kind of wonder if i should add switches as well – that might be kind of cool.

Getting the angle between two 3D vectors

onedayitwillmake No Comments
  math snippet

Another short post related to a question I was asked, that I figure might be helpful to others.
Getting the angle between two vectors in 2D is as simple as:

var angle = Math.atan2(vectorA.y - vectorB.y, vectorA.x - vectorB.x)

However that does not work in 3D space, however the angle between any two vectors (2D or 3D) is defined as the

cosine theta = (A dot B) / Normalized-A * Normalized-B

Where theta is the angle between them. To find theta, we can inverse the equation:

theta = acos( (A dot B) / Normalized-A * Normalized-B )

In code getting the angle between two vectors in 3D space translates to:

// Make up two vectors
var vectorA = new Vector3(5, -20, -14);
var vectorB = new Vector3(-1, 3, 2);
 
// Store some information about them for below
var dot = vectorA.dot(vectorB);
var lengthA = vectorA.length();
var lengthB = vectorB.length();
 
// Now to find the angle
var theta = Math.acos( dot / (lengthA * lengthB) ); // Theta = 3.06 radians or 175.87 degrees