3.现有一个正方形(30,0),(70,30),(40,70),(0,40), 编写一个函数 fun()将其四点坐标向正方形中心百分比缩小并打印输出, 例如 fun(100), 则输出原四个坐标, fun(0)则输出正方形中心坐标。用c语言完成
时间: 2024-09-24 19:09:02 浏览: 43
你可以使用C语言编写如下的函数`fun()`来实现这个需求。首先,我们需要计算出正方形的中心点以及边长,然后根据给定的比例因子调整每个点的坐标。这里假设正方形的左上角为`(x1, y1)`,右下角为`(x2, y2)`,中心点`(cx, cy)`,边长为`length`。
```c
#include <stdio.h>
#include <math.h>
// 计算正方形中心和边长
void calculate_square_info(int x1, int y1, int x2, int y2, float* cx, float* cy, float* length) {
*cx = (x1 + x2) / 2.0;
*cy = (y1 + y2) / 2.0;
*length = sqrt(pow((x2 - x1), 2) + pow((y2 - y1), 2));
}
// 根据比例缩放并打印坐标
void print_scaled_points(float cx, float cy, float length, int factor, int x1[], int y1[]) {
if (factor == 100) {
printf("(%d,%d), (%d,%d), (%d,%d), (%d,%d)\n", x1[0], y1[0], x1[1], y1[1], x1[2], y1[2], x1[3], y1[3]);
} else {
for (int i = 0; i < 4; ++i) {
int scaled_x = (int)(cx + length * factor * ((x1[i] - cx) / length));
int scaled_y = (int)(cy + length * factor * ((y1[i] - cy) / length));
printf("(%d,%d), ", scaled_x, scaled_y);
}
printf("\n");
}
}
int main() {
int x1[] = {30, 70, 40, 0};
int y1[] = {0, 30, 70, 40};
// 计算初始数据
float cx, cy, length;
calculate_square_info(x1[0], y1[0], x1[1], y1[1], &cx, &cy, &length);
// 调用函数,输出原始坐标和中心坐标
fun(100, x1, y1); // 输出原始坐标
fun(0, x1, y1); // 输出中心坐标
return 0;
}
```
上述代码定义了一个`calculate_square_info`函数用于计算中心和边长,`print_scaled_points`函数负责根据比例因子缩放坐标并打印。注意,由于浮点数运算可能会有精度损失,这里将结果转换为整数以便直接打印。在`main`函数里,我们调用了`fun`函数两次,分别处理100%的情况(显示原始坐标)和0%的情况(只显示中心坐标)。
阅读全文