using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication3
{
class vec
{
public double x;
public double y;
public vec(double x, double y)
{
this.x = x;
this.y = y;
}
public vec sub(vec vec1)
{
return new vec(this.x - vec1.x, this.y - vec1.y);
}
public double magnitude()
{
return Math.Sqrt((this.x * this.x) + (this.y * this.y));
}
public vec
div(double scalar
) {
return new vec(this.x / scalar, this.y / scalar);
}
public static double dot(vec vec1, vec vec2)
{
double ret = (vec1.x * vec2.x) + (vec1.y * vec2.y) ;
return ret;
}
}
class Program
{
static void Main(string[] args)
{
vec ball1pos = new vec(110,90);
vec ball2pos = new vec(100,100);
vec difference = ball2pos.sub(ball1pos);
double distance = difference.magnitude();
vec normal
= difference.
div(distance
); // unit vector of pos delta
vec ball1vel = new vec(0, 2);
vec ball2vel = new vec(0,-3);
vec velocityDelta = ball2vel.sub(ball1vel);
double velmag = velocityDelta.magnitude();
vec velUnit
= velocityDelta.
div(velmag
); // unit vector of vel delta
double dot = vec.dot(velUnit, normal); // dot product of unit vectors
System.Console.Write(dot);
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CnVzaW5nIFN5c3RlbS5UZXh0OwoKbmFtZXNwYWNlIENvbnNvbGVBcHBsaWNhdGlvbjMKewoKICAgIGNsYXNzIHZlYwogICAgewogICAgICAgIHB1YmxpYyBkb3VibGUgeDsKICAgICAgICBwdWJsaWMgZG91YmxlIHk7CgogICAgICAgIHB1YmxpYyB2ZWMoZG91YmxlIHgsIGRvdWJsZSB5KQogICAgICAgIHsKICAgICAgICAgICAgdGhpcy54ID0geDsKICAgICAgICAgICAgdGhpcy55ID0geTsKICAgICAgICB9CgogICAgICAgIHB1YmxpYyB2ZWMgc3ViKHZlYyB2ZWMxKSAKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBuZXcgdmVjKHRoaXMueCAtIHZlYzEueCwgdGhpcy55IC0gdmVjMS55KTsKICAgICAgICB9CgogICAgICAgIHB1YmxpYyBkb3VibGUgbWFnbml0dWRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBNYXRoLlNxcnQoKHRoaXMueCAqIHRoaXMueCkgKyAodGhpcy55ICogdGhpcy55KSk7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgdmVjIGRpdihkb3VibGUgc2NhbGFyKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyB2ZWModGhpcy54IC8gc2NhbGFyLCB0aGlzLnkgLyBzY2FsYXIpOwogICAgICAgIH0KCiAgICAgICAgcHVibGljIHN0YXRpYyBkb3VibGUgZG90KHZlYyB2ZWMxLCB2ZWMgdmVjMikKICAgICAgICB7CiAgICAgICAgICAgIGRvdWJsZSByZXQgPSAodmVjMS54ICogdmVjMi54KSArICh2ZWMxLnkgKiB2ZWMyLnkpIDsKICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICAgICB9CiAgICB9CgogICAgY2xhc3MgUHJvZ3JhbQogICAgewogICAgICAgIHN0YXRpYyB2b2lkIE1haW4oc3RyaW5nW10gYXJncykKICAgICAgICB7CiAgICAgICAgCiAgICAgICAgICAgIHZlYyBiYWxsMXBvcyA9IG5ldyB2ZWMoMTEwLDkwKTsKICAgICAgICAgICAgdmVjIGJhbGwycG9zID0gbmV3IHZlYygxMDAsMTAwKTsKICAgICAgICAgICAgdmVjIGRpZmZlcmVuY2UgPSBiYWxsMnBvcy5zdWIoYmFsbDFwb3MpOwogICAgICAgICAgICBkb3VibGUgZGlzdGFuY2UgPSBkaWZmZXJlbmNlLm1hZ25pdHVkZSgpOwogICAgICAgICAgICB2ZWMgbm9ybWFsID0gZGlmZmVyZW5jZS5kaXYoZGlzdGFuY2UpOyAgICAgICAgICAvLyB1bml0IHZlY3RvciBvZiBwb3MgZGVsdGEKCiAgICAgICAgICAgIHZlYyBiYWxsMXZlbCA9IG5ldyB2ZWMoMCwgMik7CiAgICAgICAgICAgIHZlYyBiYWxsMnZlbCA9IG5ldyB2ZWMoMCwtMyk7CiAgICAgICAgICAgIHZlYyB2ZWxvY2l0eURlbHRhID0gYmFsbDJ2ZWwuc3ViKGJhbGwxdmVsKTsKICAgICAgICAgICAgZG91YmxlIHZlbG1hZyA9IHZlbG9jaXR5RGVsdGEubWFnbml0dWRlKCk7CiAgICAgICAgICAgIHZlYyB2ZWxVbml0ID0gdmVsb2NpdHlEZWx0YS5kaXYodmVsbWFnKTsgICAgICAgIC8vIHVuaXQgdmVjdG9yIG9mIHZlbCBkZWx0YQogICAgICAgICAgICAKICAgICAgICAgICAgZG91YmxlIGRvdCA9IHZlYy5kb3QodmVsVW5pdCwgbm9ybWFsKTsgICAgICAgICAgLy8gZG90IHByb2R1Y3Qgb2YgdW5pdCB2ZWN0b3JzCiAgCQkJU3lzdGVtLkNvbnNvbGUuV3JpdGUoZG90KTsKICAgICAgICAKICAgICAgICB9CiAgICB9Cn0K