C语言函数实现心形图像和一箭穿心图像的显示

micro虾米 2014-02-22 02:06:37


可以参照http://tieba.baidu.com/p/2875197750
http://tieba.baidu.com/p/2881533130

心形图像的代码
# include <stdio.h>
# include <math.h>


# define U 0.06
# define V 0.025


# define M 1.1
# define N 1.2


int main(void)
{
float x, y;
float m, n;


for ( y=2; y>=-2; y-=U )
{
for ( x=-1.2; x<=1.2; x+=V)
{
if ( ( ( (x*x + y*y - 1)*(x*x + y*y - 1)*(x*x + y*y - 1) - x*x*y*y*y ) <= 0 ) )
printf("*");
else
printf(" ");
}
printf("\n");
}
getchar();


return 0;
}


一箭穿心图像的代码
/*
注意:程序是在VS2010上运行的
显示此文件图像需要对控制台做些设置
属性——布局:
屏幕缓冲区大小:
宽度330,高度300;
窗口大小:
宽度300,高度84;
属性——字体:
大小:
3*5
*/

#include<stdio.h>
# include <math.h>
# define U 0.04 //Y轴方向步进值
# define V 0.02 //X轴方向步进值
# define P 0.9 //P决定两颗心之间的间距
# define K 0.27 //箭轴向直线的斜率
# define R 0.14 //箭与(0,0)点相对应的距离
# define B 0.03 //B决定箭轴的宽度
# define M 1.05 //M改变内部心形X轴方向的大小
# define N 1.05 //N改变内部心形Y轴方向的大小
# define KW_UP -1 //箭尾上部直线斜率
# define KW_DOWM 3.73 //箭尾下部直线斜率
# define KT_R 0.58 //箭头右边直线斜率
# define KT_L -3.7 //箭头左边直线斜率

//void gotoxy(int x,int y);
void print_heart_arrow();

int main(void)
{
print_heart_arrow();
getchar();

return 0;
}

void print_heart_arrow()
{
float x, y;

for ( y = 1.8; y >= -1.8; y -= U )
{
for ( x = -2.8; x <= 0; x += V )
{
if ( ( ( ( ( (x+P)*(x+P) + y*y - 1)*( (x+P)*(x+P) + y*y - 1)*( (x+P)*(x+P) + y*y - 1) - (x+P)*(x+P)*y*y*y ) <= 0 ) ) //左侧心形部分
&& ( ( ( (M*(x+P)*M*(x+P) + N*N*y*y - 1)*(M*(x+P)*M*(x+P) + N*N*y*y - 1)*(M*(x+P)*M*(x+P) + N*N*y*y - 1) - M*(x+P)*M*(x+P)*N*N*N*y*y*y ) >= 0 ) )
|| ( y >= (K*x + R - B) && y <= (K*x + R + B)) && ( x <= -1.2 ) && ( x >= -2.1 ) //左侧心形的箭轴部分
|| ( ( y < K*x + 0.14 + 0.1 ) && ( y < KW_UP*x - 2.24 ) && ( y > KW_UP*x - 3.008 ) && ( y > K*x + 0.14 ) ) //箭尾在箭轴以上的区间
|| ( ( y > K*x + 0.14 - 0.1 ) && ( y < K*x + 0.14 ) && ( y > KW_DOWM*x + 6.624 ) && ( y < KW_DOWM*x + 8.718 ) ) ) //箭尾在箭轴以下的区间
printf("*");
else
printf(" ");
}

for ( x = 0; x <= 3; x += V )
{
if ( ( ( ( ( (x-P)*(x-P) + y*y - 1)*((x-P)*(x-P) + y*y - 1)*((x-P)*(x-P) + y*y - 1) - (x-P)*(x-P)*y*y*y ) <= 0 ) ) //右侧心形部分
&& ( ( ( (M*(x-P)*M*(x-P) + N*N*y*y - 1)*(M*(x-P)*M*(x-P) + N*N*y*y - 1)*(M*(x-P)*M*(x-P) + N*N*y*y - 1) - M*(x-P)*M*(x-P)*N*N*N*y*y*y ) >= 0 ) )
|| ( ( ( ((x+P)*(x+P) + y*y - 1)*((x+P)*(x+P) + y*y - 1)*((x+P)*(x+P) + y*y - 1) - (x+P)*(x+P)*y*y*y ) <= 0 ) ) //左侧心形在右侧的部分
&& ( ( ( (M*(x+P)*M*(x+P) + N*N*y*y - 1)*(M*(x+P)*M*(x+P) + N*N*y*y - 1)*(M*(x+P)*M*(x+P) + N*N*y*y - 1) - M*(x+P)*M*(x+P)*N*N*N*y*y*y ) >= 0 ) )
|| ( y >= K*x + R - B ) && ( y <= K*x + R + B) && ( x >= 2 ) && ( x < 2.6 ) //右侧心形的箭轴部分
|| ( ( y > KT_R*x - 0.79 ) && ( y > KT_L*x + 10.5 ) && ( y < 0.95 ) ) ) //箭头区间
printf("*");
else
printf(" ");
}

printf("\n");
}

return 0;
}


...全文
32733 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_34320661 2016-03-22
  • 打赏
  • 举报
回复
我照着输出程序,第一个运行出来不一样,心多了一部分。第二个出现24个错误,不知怎么改。
sololie 2014-02-22
  • 打赏
  • 举报
回复
多谢分享~ 不过没看代码,假装很欣赏
ooolinux 2014-02-22
  • 打赏
  • 举报
回复
代码很简洁,漂亮

13,871

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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