已知矩形对角线坐标求另外两点坐标

中级伴读 2013-08-28 03:01:01
急求:在直角坐标系中有ABCD四点的矩形,已知对角线AC的坐标分别为(xa,ya)和(xc,yc),还知道对角线AC与边线之间的夹角为θ,怎么求BD点的坐标(xb,yb)和(xd,yd),最好有代码,谢谢!
...全文
3535 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
中级伴读 2013-08-29
  • 打赏
  • 举报
回复
谢谢,明白代数的方式了 不过方程好难解 (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,都是平方 好复杂,怎么解
victor_woo 2013-08-29
  • 打赏
  • 举报
回复
引用 5 楼 slackwater 的回复:
汗,俺还是看不懂啊 有没有用代数,方程的方式?
那你就列方程完了 Xb,Yb 分别与A,C求出距离,等于之前求出的边长就可以了
中级伴读 2013-08-29
  • 打赏
  • 举报
回复
汗,俺还是看不懂啊 有没有用代数,方程的方式?
中级伴读 2013-08-29
  • 打赏
  • 举报
回复
感谢victor_woo
victor_woo 2013-08-29
  • 打赏
  • 举报
回复

POSITION A(0,0);
POSITION C(4,4);
 
double ANGLE_CAD = 30 * PI/180;
自己改这三个参数就可以了
victor_woo 2013-08-29
  • 打赏
  • 举报
回复

#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;
}
中级伴读 2013-08-29
  • 打赏
  • 举报
回复


楼上的,A,C两点的坐标已知,还有角度θ已知,求B,D两点的坐标
lgstudyvc 2013-08-29
  • 打赏
  • 举报
回复
楼主啊。。。。。。 这个你问的什么意思?
中级伴读 2013-08-29
  • 打赏
  • 举报
回复
老兄,能不能直接整成代码啊?
赵4老师 2013-08-28
  • 打赏
  • 举报
回复
《计算几何》
victor_woo 2013-08-28
  • 打赏
  • 举报
回复
AC表示为向量: (Xc-Xa,Yc-Ya),单位化 转为长度为1的向量 (Vacx,Vacy) 旋转矩阵 [ cost sint ] [ -sint cost ] 把θ和θ-90度代入t,得到两个旋转矩阵,乘以(Vacx,Vacy)可以得到AB和AD的方向单位向量 B=A+Vab*Lab
中级伴读 2013-08-28
  • 打赏
  • 举报
回复
2楼,这两句可否详细点 ”下面的计算可采用向量旋转法求得AB和AD的方向后求出 当然也可列代数方程直接求解“ 俺还是不清楚怎么求,谢谢
victor_woo 2013-08-28
  • 打赏
  • 举报
回复
θ是AC与AB的夹角还是AC与AD的夹角 假设角CAB=θ Lac:AC距离,根据两点坐标求出 则矩形边长1 Lbc=Lac*sinθ 矩形边长2 Lab=Lac*cosθ 下面的计算可采用向量旋转法求得AB和AD的方向后求出 当然也可列代数方程直接求解

19,464

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧