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

中级伴读 2013-08-28 03:01:01
急求:在直角坐标系中有ABCD四点的矩形,已知对角线AC的坐标分别为(xa,ya)和(xc,yc),还知道对角线AC与边线之间的夹角为θ,怎么求BD点的坐标(xb,yb)和(xd,yd),最好有代码,谢谢!
...全文
3209 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的方向后求出 当然也可列代数方程直接求解
目录 ㈠ 点的基本运算 1. 平面上两点之间距离 1 2. 判断两点是否重合 1 3. 矢量叉乘 1 4. 矢量点乘 2 5. 判断点是否在线段上 2 6. 一点饶某点旋转后的坐标 2 7. 矢量夹角 2 ㈡ 线段及直线的基本运算 1. 点与线段的关系 3 2. 点到线段所在直线垂线的垂足 4 3. 点到线段的最近点 4 4. 点到线段所在直线的距离 4 5. 点到折线集的最近距离 4 6. 判断圆是否在多边形内 5 7. 矢量夹角余弦 5 8. 线段之间的夹角 5 9. 判断线段是否相交 6 10.判断线段是否相交但不交在端点处 6 11.线段所在直线的方程 6 12.直线的斜率 7 13.直线的倾斜角 7 14.点关于某直线的对称点 7 15.判断两条直线是否相交及直线交点 7 16.判断线段是否相交,如果相交返回交点 7 ㈢ 多边形常用算法模块 1. 判断多边形是否简单多边形 8 2. 检查多边形顶点的凸凹性 9 3. 判断多边形是否凸多边形 9 4. 多边形面积 9 5. 判断多边形顶点的排列方向,方法一 10 6. 判断多边形顶点的排列方向,方法二 10 7. 射线法判断点是否在多边形内 10 8. 判断点是否在凸多边形内 11 9. 寻找点集的graham算法 12 10.寻找点集凸包的卷包裹法 13 11.判断线段是否在多边形内 14 12.简单多边形的重心 15 13.凸多边形的重心 17 14.肯定在给定多边形内的一个点 17 15.从多边形外一点出发到该多边形的切线 18 16.判断多边形的核是否存在 19 ㈣ 圆的基本运算 1 .点是否在圆内 20 2 .不共线的三点所确定的圆 21 ㈤ 矩形的基本运算 1.已知矩形三点坐标第4点坐标 22 ㈥ 常用算法的描述 22 ㈦ 补充 1.两圆关系: 24 2.判断圆是否在矩形内: 24 3.点到平面的距离: 25 4.点是否在直线同侧: 25 5.镜面反射线: 25 6.矩形包含: 26 7.两圆交点: 27 8.两圆公共面积: 28 9. 圆和直线关系: 29 10. 内切圆: 30 11. 切点: 31 12. 线段的左右旋: 31 13.公式: 32

19,472

社区成员

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

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