使用c语言写一个生成45°方向的矩形,矩形长50,宽30,不使用任何库函数,就用for来实现
时间: 2024-02-29 08:51:06 浏览: 16
好的,我来为您提供代码,如下所示:
```
#include <stdio.h>
int main()
{
int i, j;
int height = 30, width = 50;
for (i = 1; i <= height; i++)
{
for (j = 1; j <= width; j++)
{
if (((i == 1 || i == height) && j <= width) ||
((j == 1 || j == width) && i <= height))
printf("*");
else
printf(" ");
}
printf("\n");
}
return 0;
}
```
上述代码中,我们使用两个for循环嵌套来打印矩形,外层循环控制矩形的高度,内层循环控制矩形的宽度。在打印矩形的过程中,我们使用if语句来判断当前位置是否需要打印"*",如果需要,则打印"*",否则打印" "。
希望这个代码可以帮到您!
相关问题
使用c语言写一个使用霍夫变化检测矩形的代码,不使用任何库函数,图像image
好的,下面是使用霍夫变换检测矩形的 C 代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_ROWS 500
#define MAX_COLS 500
#define THRESHOLD 100
int image[MAX_ROWS][MAX_COLS];
void hough_transform(int rows, int cols, int accumulator[][cols]) {
int i, j, k;
// Initialize accumulator
for (i = 0; i < rows; i++) {
for (j = 0; j < cols; j++) {
accumulator[i][j] = 0;
}
}
// Perform Hough Transform
for (i = 0; i < rows; i++) {
for (j = 0; j < cols; j++) {
if (image[i][j] == 1) {
for (k = 0; k < cols; k++) {
accumulator[i][k]++;
accumulator[rows + j][k]++;
}
}
}
}
}
void find_rectangles(int rows, int cols, int accumulator[][cols]) {
int i, j, k, l;
int max_x, min_x, max_y, min_y;
int count = 0;
// Find rectangles
for (i = 0; i < rows; i++) {
for (j = 0; j < cols; j++) {
if (accumulator[i][j] > THRESHOLD) {
for (k = i + 1; k < rows; k++) {
if (accumulator[k][j] > THRESHOLD) {
for (l = j + 1; l < cols; l++) {
if (accumulator[i][l] > THRESHOLD && accumulator[k][l] > THRESHOLD) {
max_x = l;
min_x = j;
max_y = k;
min_y = i;
count++;
// Print rectangle coordinates
printf("Rectangle %d: (%d,%d) (%d,%d) (%d,%d) (%d,%d)\n", count, min_x, min_y, max_x, min_y, max_x, max_y, min_x, max_y);
}
}
}
}
}
}
}
}
int main() {
int rows, cols;
int accumulator[MAX_ROWS + MAX_COLS][MAX_COLS];
// Read image from file
FILE *fp = fopen("image.txt", "r");
fscanf(fp, "%d %d", &rows, &cols);
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
fscanf(fp, "%d", &image[i][j]);
}
}
fclose(fp);
// Perform Hough Transform
hough_transform(rows, cols, accumulator);
// Find rectangles
find_rectangles(rows + cols, cols, accumulator);
return 0;
}
```
这段代码中,我们首先读取图像文件 `image.txt`,然后使用霍夫变换检测矩形,并输出矩形的坐标。注意,这里我们使用了一个二维数组来表示图像,其中 `1` 表示黑色像素,`0` 表示白色像素。同时,我们使用一个二维数组来记录霍夫变换的累加器。最后,我们设置了一个阈值 `THRESHOLD`,用于筛选出符合条件的矩形。
使用c语言写一个使用霍夫变化检测矩形的代码,不使用任何库函数,图像image[120[188]
好的,以下是使用霍夫变换检测矩形的C语言代码,代码中使用了图像image[120][188],并且没有使用任何库函数:
```c
#include <stdio.h>
#include <stdlib.h>
#define IMG_ROWS 120
#define IMG_COLS 188
#define THRESHOLD 50
int main() {
int image[IMG_ROWS][IMG_COLS] = {0}; // 假设图像已经存储在二维数组image中
int accu[IMG_ROWS][IMG_COLS] = {0}; // 累加器数组
int max_val = 0, max_row = 0, max_col = 0, max_width = 0, max_height = 0;
// 霍夫变换
for (int row = 0; row < IMG_ROWS; row++) {
for (int col = 0; col < IMG_COLS; col++) {
if (image[row][col] > THRESHOLD) { // 如果当前像素的灰度值大于阈值
for (int width = 1; width <= IMG_COLS - col; width++) { // 枚举矩形的宽度
for (int height = 1; height <= IMG_ROWS - row; height++) { // 枚举矩形的高度
if (col + width < IMG_COLS && row + height < IMG_ROWS) { // 防止数组越界
for (int i = row; i < row + height; i++) {
for (int j = col; j < col + width; j++) {
accu[i][j]++; // 累加器加一
}
}
}
}
}
}
}
}
// 在累加器数组中寻找最大值
for (int row = 0; row < IMG_ROWS; row++) {
for (int col = 0; col < IMG_COLS; col++) {
if (accu[row][col] > max_val) {
max_val = accu[row][col];
max_row = row;
max_col = col;
}
}
}
// 寻找矩形的宽度和高度
for (int width = 1; width <= IMG_COLS - max_col; width++) {
for (int height = 1; height <= IMG_ROWS - max_row; height++) {
if (max_col + width < IMG_COLS && max_row + height < IMG_ROWS) {
int count = 0;
for (int i = max_row; i < max_row + height; i++) {
for (int j = max_col; j < max_col + width; j++) {
if (accu[i][j] >= THRESHOLD) {
count++;
}
}
}
if (count == width * height) { // 如果矩形内的所有像素都满足条件
max_width = width;
max_height = height;
}
}
}
}
printf("矩形的左上角坐标为 (%d, %d),宽度为 %d,高度为 %d\n", max_col, max_row, max_width, max_height);
return 0;
}
```
以上是使用霍夫变换检测矩形的C语言代码,希望能够帮助到你!