目录
问题描述:
问题描述:矩形的一个顶点在原点,已知矩形的宽度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");
}