已知矩形的宽和高以及与x轴夹角,求对边的两条边的中心座标

目录

问题描述:

解决方案:

编程测试


问题描述:

问题描述:矩形的一个顶点在原点,已知矩形的宽度W以及高度H,以及矩形和X轴方向的夹角角度angle,求离原点较远的两条边的中心座标点。P(x,y)以及Q(x,y),如下图所示。

解决方案:

求矩形边的中心座标点,最简单的方法就是将其余三个顶点的座标全部求出来,只要将两个顶点的座标点相加除2就是中心点的座标。Point1和Point3直接利用三角函数求即可。Point2作一条辅助线,找到和point1的关系即可。

x2 + sin(弧度)*h = x1

y1 + cos(弧度)*h = y2

就能得出如下关系

	P.x_ = (2 * cos(angle) * width - sin(angle) * hight) / 2;
	P.y_ = (2 * sin(angle) * width + cos(angle) * hight) / 2;
	Q.x_ = (cos(angle) * width - 2 * sin(angle) * hight) / 2;
	Q.y_ = (sin(angle) * width + 2 * cos(angle) * hight) / 2;

编程测试

设长度和高度都是根号2,角度为45度,将程序计算结果和实际结果对比一下即可。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define PI 3.141592

typedef struct {
	float x_;
	float y_;
}PointSturuct;

int main() {
	float width = sqrt(2);
	float hight = sqrt(2);
	float angle = 45 * (PI/180); //角度换成弧度制  三角函数入参是弧度值
	PointSturuct P, Q;
	P.x_ = (2 * cos(angle) * width - sin(angle) * hight) / 2;
	P.y_ = (2 * sin(angle) * width + cos(angle) * hight) / 2;
	Q.x_ = (cos(angle) * width - 2 * sin(angle) * hight) / 2;
	Q.y_ = (sin(angle) * width + 2 * cos(angle) * hight) / 2;
	printf("P(x,y) = (%f,%f)\r\n",P.x_,P.y_);
	printf("Q(x,y) = (%f,%f)\r\n",Q.x_,Q.y_);
	//float x = sin(angle);
	//float y = cos(angle);
	//printf("sin(angle) = %f\r\ncos(angle) = %f\r\n", x,y);
    system("pause");
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章