急求:在直角坐标系中有ABCD四点的矩形,已知对角线AC的坐标分别为(xa,ya)和(xc,yc),还知道对角线AC与边线之间的夹角为θ,怎么求BD点的坐标(xb,yb)和(xd,yd),最好有代码,谢谢!矩形坐标对角线c++
解决方案 »
- qiu
- 请教不同版本IE中getBoundingClientRect的问题
- 请大家给看个代码,我写了个dll,没有正常运行。
- 工具栏图标怎么加载ICO?
- VC中有没有功能和TC中的outport()一样的函数??
- 哪位大哥能实现自绘弹出菜单中子菜单项右边那个向右的箭头
- [跪求高手指点]如何在复杂的背景上,擦除已经绘制的文字(前提文字是使用GDI+的Drawstring绘制的)
- 一个小问题(在线等)!
- 怎么给自己做的控件增加方法,好像通过一个什么向导,昨天刚用过,今天忘了:(
- 我编了一个小程序,可一运行就报告:CPU使用率达到100%,why??
- 除了Lacewing还有哪些和这个轻量级Web服务器类似的库?
- 如何获取当前鼠标指针的型状
矩形边长2 Lab=Lac*cosθ下面的计算可采用向量旋转法求得AB和AD的方向后求出当然也可列代数方程直接求解
”下面的计算可采用向量旋转法求得AB和AD的方向后求出当然也可列代数方程直接求解“俺还是不清楚怎么求,谢谢
[ cost sint ]
[ -sint cost ]把θ和θ-90度代入t,得到两个旋转矩阵,乘以(Vacx,Vacy)可以得到AB和AD的方向单位向量B=A+Vab*Lab
那你就列方程完了Xb,Yb 分别与A,C求出距离,等于之前求出的边长就可以了
不过方程好难解
(xd-xa)2+(yd-ya)2 = ((xc-xa)2+(yc-ya)2)*cos2θ
(xd-xc)2+(yd-yc)2 = ((xc-xa)2+(yc-ya)2)*sin2θ
xa,ya,xc,yc,角度θ都是已知的,求xd,yd
晕,这个没法写平方,所有的2,都是平方好复杂,怎么解
#include <math.h>const double PI = 3.1415926;typedef struct POSITION
{
double x;
double y;
public:
POSITION(double xx,double yy)
{
x = xx;
y=yy;
}
} POSITION;typedef POSITION VECTOR;//两点之间距离
double distance(POSITION const p1,POSITION const p2)
{
return sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));
}//p1指向p2的向量,计算单位向量
void vectorOf(POSITION const p1,POSITION const p2,VECTOR& v)
{
v.x=p2.x-p1.x;
v.y=p2.y-p1.y; double len = sqrt(v.x*v.x+v.y*v.y); if(len>0.0000001)
{
v.x = v.x/len;
v.y = v.y/len;
}
}//向量v0转到angle得到v
void rotate(VECTOR const v0,VECTOR& v,double angle)
{
double cost = cos(angle);
double sint = sin(angle); v.x = v0.x*cost-v0.y*sint;
v.y = v0.x*sint+v0.y*cost;
}//p0沿v向移动len的p1
void movePosition(POSITION const p0,VECTOR const v,double len,POSITION & p1)
{
p1.x = p0.x +v.x*len;
p1.y = p0.y +v.y*len;
}int main(int argc, char* argv[])
{
POSITION A(0,0);
POSITION C(4,4); double ANGLE_CAD = 30 * PI/180;
double AC = distance(A,C);
double AD = AC*cos(ANGLE_CAD);
double AB = AC*sin(ANGLE_CAD);
VECTOR V_AC(0,0);
vectorOf(A,C,V_AC);
//求D
VECTOR V_AD(0,0);
rotate(V_AC,V_AD,-ANGLE_CAD);
POSITION D(0,0);
movePosition(A,V_AD,AD,D); //求B
VECTOR V_AB(0,0);
rotate(V_AC,V_AB,PI/2-ANGLE_CAD);
POSITION B(0,0);
movePosition(A,V_AB,AB,B);
return 0;
}
POSITION A(0,0);
POSITION C(4,4);
double ANGLE_CAD = 30 * PI/180;
自己改这三个参数就可以了