• Create Account

Member Since 29 Apr 2011
Offline Last Active Dec 11 2012 03:44 PM

### In Topic: Individual vertex coloring is somehow disabled.

09 September 2012 - 01:18 PM

That worked! Thank you so much!

I just hate it when I run into these speed bumps, which quite frankly is caused by my own lack of attention.

Best regards, Pimms.

### In Topic: Vector transformation

09 August 2011 - 02:48 AM

Thanks again for your replies -

As it turned out, a Normalized vector is in fact what I was looking for to begin with. Thank you for putting up with my ridiculously bad math knowledge.

//Pimms

### In Topic: Vector transformation

08 August 2011 - 06:47 PM

I came up with something that works somewhat decent, thought I'd share it as it might be of help to someone out there It's messy as shit, and could use a rewrite, but I'm satisfied considering it's 2:45 AM.

As mentioned, this function returns a vector scaled down to 1.

```
inline b2Vec2 scaleVecTo1( b2Vec2 vector ) {

//flag for reversing them to negative before return

bool invX=NO, invY=NO;

float x=0.f, y=0.f;

float ratio;

invX = vector.x < 0.f ? YES : NO;

invY = vector.y < 0.f ? YES : NO;

vector.x *= vector.x < 0.f ? -1.f : 1.f;

vector.y *= vector.y < 0.f ? -1.f : 1.f;

if ( vector.x > vector.y ) {

for (;;) {

if ( vector.x < 1.0f ) {

ratio = 1.f / vector.x;

x = vector.x * ratio;

y = vector.y  * ratio;

break;

}

if ( vector.x > 1.0f ) {

ratio = vector.x / vector.x;

x = vector.x / ratio;

y = vector.y / ratio;

break;

}

}

}

if ( vector.x <= vector.y ) {

for (;;) {

if ( vector.y < 1.0f ) {

ratio = 1.f / vector.y;

y = vector.y * ratio;

x = vector.x  * ratio;

break;

}

if ( vector.y > 1.0f ) {

ratio = vector.y / vector.y;

y = vector.y / ratio;

x = vector.x / ratio;

break;

}

}

}

x *= invX ? -1.f : 1.f;

y *= invY ? -1.f : 1.f;

return b2Vec2(x,y);

}

```

### In Topic: Vector transformation

08 August 2011 - 06:35 PM

Thanks for the quick replies, guys. Appreciate it a lot

@alvaro
I'm not 100% sure of what you mean - what I've tried (without much success) is to first find the ratio between X and Y, based on the highest value.

If the highest value is > 1.0, I divide X and Y by the highest value. This produces some funny results, though.

If the highest value is < 1.0, I find the ratio by dividing 1 by the highest. Then X and Y is divided by ratio.

The current (faulty) code:
```	if ( vector.x > vector.y ) {
for (;;) {
if ( high < 1.0f ) {
ratio = 1.f / high;
x = high * ratio;
y = low  * ratio;
break;
}
if ( high > 1.0f ) {
ratio = high / high;
x = high / ratio;
y = low / ratio;
break;
}
}
}
```

@Hassanbasil
I've looked into normalizing the vector, but that would be quite the workaround for me, as I'm calculating the force to be applied as so;

```body->ApplyForce( (hitVector*distance)*force, body->GetWorldCenter() );
```

Where hitVector is the vector I'm trying to calculate.

PARTNERS