lcd240128的如何画出一个圆的形状

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lcd240128的如何画出一个圆的形状相关的知识,希望对你有一定的参考价值。

参考技术A 在 LCD 上 直接用像素点画圆
1 先初始化LCD
在LCD上直接操作像素点,没多少效率,实际测试中对字符界面也是可以的,直接上代码:

2 怎么计算像素点
根据方程 :(x-a)(x-a) + (y-b) (y-b) = r^2可以写出最简单的算法

画出第一个圆,仔细看这个圆,在最左边有很多像素点“丢失”,这是因为从最左边开始,在x+1后,y增幅较大,相邻的两个像素点纵坐标差值较大;而在靠近最高点处,Y的增幅又变小,导致看起来两边稀,上面密的效果。

.a…


a…

于是想到了对y轴进行像素补偿,在 y_now - y_last > 1 的时候,补偿y,防止y跳变

补偿之后的圆长这个样子,
.a…
.a…
.a…
a…
看着好像还是有点僵硬,干脆补偿的时候从中间截断,前半部分用上一个像素点的x坐标,后半段才用下一个点的x坐标

像这样
.a… 一半用新的横坐标
.a…
a…一半用旧的横坐标
a…

把三个圆的效果和微软自带的的画图工具画的圆作对比:

优点:和微软的比起来,左右的像素点看起来更平滑
缺点:上下的像素点还可以待进一步优化

3 代码如下:
有空了我会把图贴上

文章知识点与官方知识档案匹配
C技能树首页概览
108396 人正在系统学习中
打开CSDN APP,看更多技术内容

【玩转嵌入式屏幕显示】(三)TFT-LCD屏幕打点 + 画线 + 画矩形 + 画圆...
0. 引言TFT-LCD屏幕的画直线、画斜线、画矩形、画圆等算法都是基于打点函数的,所以此程序可以移植到任何屏幕的基本驱动程序之上。1. 打点函数 —— 底层函数(移植需修改)打点函数其实就是屏幕显存(液晶控制器显存)中某一个点的颜色...
画圆方法小结_i_water的博客
1、在LCD屏幕上用颜色画一个空心圆 #include <math.h>#define pi 3.1415926#define N 360void draw_Circle(intm,intn,intr,intcolor) inti;intx,y;for(i=0;i<N;i++) x=m+r*cos(2.0*pi*i/N);y= n+r*sin(2.0...
LCD 画线方法及C语言实现
LCD 画线方法及C语言实现,点阵LCD画直线的多种方法
计算机图形学---基于整个屏幕像素点的直接画圆法
基于整个屏幕像素点的直接画圆法 用来记录一个基于整个屏幕像素点的直接画圆法! 算法简介 设直线的两个端点是A(Xa,Ya)和B(Xb,Yb),则我们仅需考虑x=Xa,x=Xb,y=Ya,y=Yb四条线围成的矩形区域内的每一个像素点的情况,设P(X0,Y0);是该区域的任意像素点,则可以通过判断P到直线AB之间的距离来决定P点是否被点亮。 点到直线的距离公式 d=∣Ax0+By0+CA2+b2∣ ...
继续访问

我的5110画图库--Nokia 5110液晶屏实现画点、画线、画矩形、画圆...
#define LCD_Y 48 //液晶屏纵坐标高度 #define LCD_COLUMN LCD_Y / 8 //液晶屏行高度 #define LCD_AREA LCD_X * LCD_Y //液晶屏面积 #define LCD_AREA_BYTE LCD_COLUMN * LCD_ROW //液晶屏字节容量 ...
(学习笔记)stm32f4在液晶上画圆及填充圆的几种方法
先说下画圆,根据圆的对称性将圆8等分,求出其中一份,其他可以通过坐标变换得到。得到过程可以百度中点画圆法。 程序: void LCD_Draw_Circle(uint16_t Xpos,uint16_t Ypos,uint16_t Radius) int16_t mx=Xpos,my=Ypos,x=0,y=Radius; int16_t d=1-Radius; while(y>x)
继续访问
LCD画线画圆
LCD画线画圆
mpy lcd 绘制圆
1.实心 def drawCirc_fill(tft,x,y,r,pen): ox =r oy =0 err = -r while ox>=oy: last_oy = oy err +=oy oy+=1 err+=oy tft.hline(x-ox,y+last_oy,ox*2+1,pen) ##3 if last_oy != 0: tft.hli
继续访问
lcd画圆算法
#include "math.h" #define PI 3.14159265 #define LCDWIDTH 800 #define LCDHEIGHT 480 //x,y:坐标 //color:颜色 //angle:角度 //radius:半径 void LCD_DrawPoint_Rotate(u16 x,u16 y,u16 color, int angle,int radius) ...
继续访问
LCD编程显示像素点
一 LCD屏幕 本次学习使用的LCD屏是一块 800*480 分辨率的全彩屏幕。 分辨率的意思是:每行有800个像素点,一共有480行。 全彩的意思是:像素点显示的颜色是由RGB红绿蓝三种单颜色组成,其次还有阿尔法粒子透明度A。也就是ARGB。 LCD显示屏在工作中需要显卡,显卡中要有显存。而本次学习的开发板没有独立显卡,所以需要分配虚拟显存。而每个像素点在显存中占据4个字节的空间,也就是ARGB...
继续访问
【LCD画圆】算法系列之十一:圆生成算法
算法系列之十一:圆生成算法 原文:http://blog.csdn.net/orbit/article/details/7253285 分类: 算法系列 2012-02-12 21:45 6828人阅读 评论(21) 收藏 举报 输入您的搜索字词 提交搜索表单 在平面解析几何中,圆的方程可以描述为(x – x...
继续访问
热门推荐 lcd彩屏画点画线和画圆 嵌入式开发
在lcd显示屏上的指定点画出直线,点,圆 本文源于 海之遥的博客 http://blog.sina.com.cn/atpx1989 亲测可行,觉得很有意义,拿过来以备以后用 //-----------画点函数。参数:坐标,颜色------------------- void draw_point(int x, int y, int clor) fb[
继续访问
STM32学习笔记-LCD画直线,画圆
STM32学习笔记-LCD画直线,画圆 1.画直线 如果在两点(a,b)(c,d)之间画直线,首先考虑c>a,d>b,且k<1的情况,其他情况根据对称关系就能推导出来了。 为了使问题简单化,先将这两点进行平移,将(a,b)平移到原点,那么(c,d)变换后的坐标就是(e,f),其中e=c-a,f=d-b,斜率k=f/e; 假设在LCD上我们取的第i个像素点的坐标是(i,j),那么第...
继续访问

C语言 程序 画圆、画圆和y=x^2
绘制圆 在屏幕上用“*”画一个空心的圆 *问题分析与算法设计 打印圆可利用图形的左右对称性。根据圆的方程: R*R=X*X+Y*Y 可以算出圆上每一点行和列的对应关系。 程序思想和之前的两个程序一样。整个圆向右平移R个单位,因为长宽比不一样所以还要有个系数,下面是我写的程序 #include #include #define R 10 #defi
继续访问
图形学 画圆算法(Bresenham + 中点)
圆的特性 我们的圆中,具有对称的特性,在xy坐标轴中具有八对称的特性。 我们只需要画出一个点 按照八对称性,我们就能获得八个点,所以我们只需要画一个八分之一圆就好了。我们就选择最利于我们思考的第一象限0~Math.sqrt(1)部分,就是上边橘点位置的区域。 中点画圆 我们通过中点到圆的距离(通过符号判定),我们就能选择相应的点。我们每次的选择中点时,增量都是有规律的。 我们通过对直...
继续访问
S3C2440裸机------LCD_画点线圆
目录 1.画点 2.画线、圆 1.画点 我们首先实现画点的函数, #include "lcd.h" /* 实现画点 */ /* 获得LCD参数 */ static unsigned int fb_base; static int xres, yres, bpp; void fb_get_lcd_params(void) get_lcd_params(&fb_base, &xres, &yres, &bpp); /* rgb: 0x00RRGGB
继续访问
记录STM32F1控制LCD绘制圆形
注:代码参考与正点原子教程 //绘制一个圆,传入圆心坐标和半径 void gui_dispCircle(uint32_t x0,uint32_t y0,uint32_t r) int a,b; int di; a=0; b=r;
LCD编程_画点线圆
上篇博客中进行了lcd的简单测试,这篇博客将进行更加复杂的测试——画点、画线、画圆。画线和画圆是在画点的基础上实现的,因此本篇博客重点实现画点操作。 先抛出这样的一个问题,已知: (x,y)的坐标; bpp; xres; yres; 那么,如何在framebuffer中获得像素的地址呢? (x,y)像素的起始地址 = fb_base +(xres * bpp /8...
继续访问
基于像素点的图形显示算法(Bresenham圆形个人理解)
目录 目的 几何原理 代码优化 参考区域选取 计算量 填充方式 程序源码 目的 本实验基于STM32F103RC+TFTLCD屏,旨在于在LCD屏上显示一个实心圆形,然而众所周知,对于屏幕而言,我们只能操作各个像素点,因此,选择出最接近标准圆形的像素点就成了本次实验的主要目的,最终得到的圆形大概应该长这样 看起来很不规则,但是这里只是半径为5个像素点的圆形,因此放大来...
继续访问

最新发布 TFT-LCD显示直线、矩形、圆形
usR、usG、usB变量为16位,但首先读取出的RED数据占5位,且在高字节,GREEN数据占6位,同样在高字节,BLUE数据占5位,在高字节,所以组合时要通过移位,将RED数据放在usColor的高5位,GREEN数据占中间的6位,剩下的5位放BLUE数据,这样就组合成了RGB565的数据格式。如果是填充矩形,则调用填充颜色函数按照矩形的宽和高填充颜色就行,如果是不填充矩形,则画四条直线。之前显示ASCII字符、中文和图片都是使用的取模软件,这次直接用代码驱动显示直线、矩形和圆形。
继续访问

用C语言字符画圆
用C语言画圆,这是一是算法的问题,我们知道,程序是由数据结构加算法组成的,研究这类东西,其实也是研究算法的问题,是比较有意思的。圆心为0的时候,圆的公式公式:那我们要如何写代码呢?示例代...
继续访问

【opencv学习笔记.1】操作像素画圆
任何图像处理算法,都是从操作每个像素开始的,刚接触Opencv,写的第一个小程序:分别用动态地址和指针操作像素画圆。 用的是VS2015搭opencv3.0 一.首先是用动态地址计算来操作像素,这种方法简洁明了,符合大家对像素的直观认识
lcd画圆
参考技术B 百度知道
如何画出一个标准的圆,画圆的时候该注意些什...展开
sevenzealing
高粉答主
关注我不会让你失望
关注
成为第11753位粉丝
圆规使用时应注意:
1、固定的圆规针脚不能移动。
2、一旦确定画圆时候的半径,那么圆规两脚之间的距离就不可以再变化。
3、针脚那一头尖锐,使用时要注意不要伤到手。
4、画圆的过程中圆规要稍微倾斜30度左右,使画出的圆的线条流畅。
5、圆规两脚之间的高度要一样。
圆是一种几何图形。根据定义,通常用圆规来画圆。
同圆内圆的直径、半径长度永远相同,圆有无数条半径和无数条直径。圆是轴对称、中心对称图形。对称轴是直径所在的直线。 同时,圆又是“正无限多边形”,而“无限”只是一个概念。当多边形的边数越多时,其形状、周长、面积就都越接近于圆。所以,世界上没有真正的圆,圆实际上只是概念性的图形。
扩展资料
画圆的其他方法: 
1、用手指画圆。以大拇指为圆心,以食指与大拇指之间的距离为半径,旋转一周所形成的图形就是圆形。
2、将绳子的一端按在圆心的位置,拉直绳子,沿着圆心画,注意笔身要保持垂直。
3、还有一种方法是在绳子的两端各系一支铅笔,把一支定在圆心的位置,另一支绕着圆心画

模板计几圆的反演

hdu4773:http://acm.hdu.edu.cn/showproblem.php?pid=4773

题意:给你两个相离的圆,以及一个点,求所有和这两个圆相切,并且经过该点的圆。

我们先画出满足题意的圆,然后把这三个圆反演,给定的两个圆因为不经过p点,反演后是两个圆,然后ans圆经过p点,所以反演后是一条直线,又因为和两个圆相切,所以反演出来的直线也是和两个圆相切的,所以就是两个反演圆的外公切线了(不可以是内公切先,画画图就明白了)。

技术图片
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define eps 1e-6
 4 int sgn(double x){
 5     if( fabs(x) < eps) return 0;
 6     if( x < 0) return -1;
 7     return 1;
 8 }
 9 struct Point{
10     double x,y;
11     Point operator - (const Point& b){
12         return (Point){ x - b.x,y-b.y};
13     }
14     Point operator + (const Point& b){
15         return (Point){x+b.x,y+b.y};
16     }
17     Point operator * (const double& b){
18         return (Point){b * x,b * y};
19     }
20     Point Move(double a,double d){
21         return (Point){ x + d * cos(a),y + d * sin(a)};
22     }
23 };
24 struct Circle{
25     Point o;
26     double r;
27 }c[3],c0,ansc[3];
28 int tot;
29 double cross(Point a,Point b,Point c){
30     return (b.x - a.x) * (c.y - a.y) - (c.x - a.x)*(b.y - a.y);
31 }
32 double dot(Point a,Point b,Point c){
33     return (b.x - a.x) * (c.x - a.x) + (b.y - a.y) * (c.y - a.y);
34 }
35 double dis(Point a,Point b){
36     return sqrt( (a.x - b.x) * (a.x - b.x) + (a.y - b.y)*(a.y - b.y));
37 }
38 Point Point_Inver(Circle c0,Point P){
39     Point OP = P - c0.o;
40     double len = dis(c0.o,P);
41     len = len*len;
42     return c0.o + OP*( c0.r * c0.r / len );
43 }
44 Circle Circle_Inver(Circle c0,Circle a){
45     Circle res;
46     Point OA = a.o - c0.o;
47     double len = dis(a.o,c0.o);
48     Point up = c0.o + OA * ( ( len + a.r) / len );
49     Point down = c0.o + OA *( (len - a.r) / len );
50     up = Point_Inver(c0,up);
51     down = Point_Inver(c0,down);
52     res.o = (up+down) * 0.5;
53     res.r = dis(up,down) * 0.5;
54     return res;
55 }
56 Circle Line_Inver(Circle c0,Point a,Point b){
57     Circle res;
58     double d = fabs( cross(a,c0.o,b) / dis(a,b));
59     res.r = c0.r * c0.r / (2.0 * d);
60 
61     double len = dot(a,b,c0.o) / dis(a,b);
62     Point AB = b - a;
63     Point c = a + AB * (len/dis(a,b));
64     Point CO = c - c0.o;
65     res.o = c0.o + CO * (res.r/d);
66 
67     //double len = dis(a,c[1].o);
68     //res.o = c0.o + (a-c[1].o) * (res.r/len);
69     return res;
70 }
71 void solve(){
72     for(int i = 1;i<=2;++i) c[i] = Circle_Inver(c0,c[i]);
73     if( c[1].r < c[2].r - eps) swap(c[1],c[2]);
74     Point v = c[2].o - c[1].o;
75     double a1 = atan2(v.y,v.x);
76     double a2 = acos( (c[1].r - c[2].r) / dis(c[1].o,c[2].o));
77     Point p1 = c[1].o.Move(a1 + a2,c[1].r);
78     Point p2 = c[2].o.Move(a1 + a2,c[2].r);
79     //cerr<<p1.x<<" "<<p1.y<<" "<<p2.x<<" "<<p2.y<<endl;
80     if( sgn(cross(c[1].o,p1,p2)) == sgn(cross(c0.o,p1,p2)) ) ansc[++tot] = Line_Inver(c0,p1,p2);
81     p1 = c[1].o.Move(a1-a2,c[1].r);
82     p2 = c[2].o.Move(a1-a2,c[2].r);
83     //cerr<<p1.x<<" "<<p1.y<<" "<<p2.x<<" "<<p2.y<<endl;
84     if( sgn(cross(c[1].o,p1,p2)) == sgn(cross(c0.o,p1,p2)) ) ansc[++tot] = Line_Inver(c0,p1,p2);
85 }
86 int main(){
87     c0.r = 10.0;
88     int T; scanf("%d",&T);
89     while(T--){
90         tot = 0;
91         for(int i = 1;i<=2;++i) scanf("%lf %lf %lf",&c[i].o.x,&c[i].o.y,&c[i].r);
92         scanf("%lf %lf",&c0.o.x,&c0.o.y);
93         solve();
94         printf("%d
",tot);
95         for(int i = 1;i<=tot;++i) printf("%.8f %.8f %.8f
",ansc[i].o.x,ansc[i].o.y,ansc[i].r);
96     }
97     return 0;
98 }
View Code

 

以上是关于lcd240128的如何画出一个圆的形状的主要内容,如果未能解决你的问题,请参考以下文章

如何确定PCB板大小

Java - 当我运行我的公式计算器程序时,即使选择了另一个形状,它也默认询问“圆的半径是多少”

如何使用传统图像处理方法进行圆的检测和测量

带有形状的 WPF 剪辑

如何绘制形状如下的UIButton?

画图表示四分之三怎么画