stean上有战争雷霆dlc:还是求点。已经一条直线上两点,和直线外一点

来源:百度文库 编辑:高考问答 时间:2024/05/02 00:34:10
三点A,B,C (坐标A.x, A.y ......)
A、B是矩形的两端点
且C在与AB平行的 矩形另一边上 或其延长线上
求矩形另外两端点M、N
再求与MN夹角为45度,与M距离为10的点P
以及与MN夹角45度,与N距离为10的点Q
注:P、Q都在矩形内部
都是基础数学题,送分。200分。嘿嘿

void F(const CPoint &A, const CPoint &B, const CPoint &C,
CPoint &M, CPoint &N, CPoint &P, CPoint &Q)
{
double k; CPoint T;//设AB斜率k,垂足坐标T

//1. 计算AB斜率k和垂足坐标T
if (A.x==B.x) { T.x=A.x; T.y=C.y;}
else { k=double((A.y-B.y))/(A.x-B.x);
double Tx=(k * k * A.x + k * (C.y - A.y) + C.x) / (k * k + 1);
T.x=(long)Tx;
T.y=(long)( k * (Tx - A.x) + A.y);
}

//2. 计算M,N
M=C-T+A;
N=C-T+B;

double t,r;
struct point {double x,y;};
//3. 计算P;
//做矩形(A b P m), b在AB上,m在AM上。
point b,m;

//3.1 平移坐标原点到A,计算平移后B,M坐标
b.x=B.x-A.x; b.y=B.y-A.y; //B坐标
m.x=M.x-A.x; m.y=M.y-A.y; //M坐标

//3.2 B缩放变换到b点
r=sqrt(b.x*b.x+b.y+b.y);
t=10/r;
b.x*=t; b.y*=t;

//3.3 M缩放变换到m点
r=sqrt(m.x*m.x+m.y*m.y);
t=(r-10)/r;
m.x*=t; m.y*=t;

//3.4 计算坐标原点平移后的P点坐标
P.x=long(b.x+m.x);
P.y=long(b.y+m.y);

//3.5 平移坐标原点到原来坐标系原点
P+=A;

//4. 同样以B为坐标原点计算Q
//做矩形(B a Q n), a在AB上,n在BN上。
//平移坐标原点到B,下面计算平移后a,n坐标

point a,n;
a.x=A.x-B.x; a.y=A.y-B.y;
r=sqrt(a.x*a.x+a.y+a.y);
t=10/r;
a.x*=t; a.y*=t;

n.x=N.x-B.x; n.y=N.y-B.y;
r=sqrt(n.x*n.x+n.y*n.y);
t=(r-10)/r;
n.x*=t; n.y*=t;

Q.x=long(a.x+n.x);
Q.y=long(a.y+n.y);

Q+=B;
}

void main()
{
CPoint A(189,460);
CPoint B(278,29);
CPoint C(400,300);
CPoint M,N;
CPoint P,Q;
F(A,B,C,M,N,P,Q);
cout<<"A("<<A.x<<','<<A.y<<")\n";
cout<<"B("<<B.x<<','<<B.y<<")\n";
cout<<"M("<<M.x<<','<<M.y<<")\n";
cout<<"N("<<N.x<<','<<N.y<<")\n";
cout<<"P("<<P.x<<','<<P.y<<")\n";
cout<<"Q("<<Q.x<<','<<Q.y<<")\n";
cout<<"C("<<C.x<<','<<C.y<<")\n";

}

小学文化做这题切不是对牛谈清

可以借鉴作图法的原理
加上解析几何相佐即可求得
直线AB的方程式很容易写得出吧
过C点与AB斜率相等的直线方程式也容易得到
它就是MN的方程式
过A点与AB垂直的直线、过B点与AB垂直的直线
与MN的交点容易求得(就是M、N两点)
P、Q两点也是用类似方法求得

可以借鉴作图法的原理
加上解析几何相佐即可求得
直线AB的方程式很容易写得出吧
过C点与AB斜率相等的直线方程式也容易得到
它就是MN的方程式
过A点与AB垂直的直线、过B点与AB垂直的直线
与MN的交点容易求得(就是M、N两点)
P、Q两点也是用类似方法求得

可以借鉴作图法的原理
加上解析几何相佐即可求得
直线AB的方程式很容易写得出吧
过C点与AB斜率相等的直线方程式也容易得到
它就是MN的方程式
过A点与AB垂直的直线、过B点与AB垂直的直线
与MN的交点容易求得(就是M、N两点)
P、Q两点也是用类似方法求得

用基础数学方法解了以后写到代码里会很简单。