我有一套相对简单的电路.小型仅涉及电阻器,电容器,电感器和微调器/微调器(即:三端可变电阻器).

我试图找到一种从节点电压方程矩阵中渲染这些电路的简单方法.我不需要计算电流/电压值(我已经能够做到这一点).

我对如何在HTML5中渲染2D形状有基本的了解.在这一点上,我只需要一种简单的方法来通过线条放置和连接形状.我总是可以做一个简单的放置,但是关于如何避免重新发明轮子的任何建议都会很棒.

谢谢.

解决方法

对不起已经有一段时间了,但我已经完成了我答应你的图书馆了.使用它,我可以创建这样的电路:

我已经在javascript中创建了一个简化的绘图系统,您可以通过构建一个简短的库来使用它.将代码复制并粘贴到您的页面中,然后保留它.如果你想改变它,要么问我(或其他知道Javascript的人),要么在W3Schools或Mozilla MDN等网站上学习.代码需要一个id为“canvas”的canvas元素.代码:

"use strict"

        var wW=window.innerWidth;
        var wH=window.innerHeight;
        var canvasHTML=document.getElementById("canvas");
        canvasHTML.width=wW;
        canvasHTML.height=wH;
        var ctx=canvasHTML.getContext("2d");
        var ix;
        var iy;
        var x;
        var y;
        var d;
        var dx;
        var dy;

        function beginCircuit(a,b)
        {
            ctx.linewidth=1.5;
            ctx.strokeStyle="#000";
            ctx.beginPath();
            x=a;
            y=b;
            d=0;
            dx=1;
            dy=0;
            ix=x;
            iy=y;
            ctx.moveto(x,y);
            drawWire(50);
            drawPower();
        }

        function endCircuit()
        {
            ctx.lineto(ix,iy);
            ctx.stroke();
        }

        function drawWire(l)
        {
            x+=dx*l;
            y+=dy*l;
            ctx.lineto(x,y);
        }       

        function drawPower()
        {
            var n;
            drawWire(10);
            n=3;
            ctx.moveto(x+10*dy,y+10*dx);
            ctx.lineto(x-10*dy,y-10*dx);
            x+=dx*5;
            y+=dy*5;
            while(n--)
            {
                ctx.moveto(x+15*dy,y+15*dx);
                ctx.lineto(x-15*dy,y-15*dx);
                x+=dx*5;
                y+=dy*5;
                ctx.moveto(x+10*dy,y+10*dx);
                ctx.lineto(x-10*dy,y-10*dx);
                if(n!=0)
                {
                    x+=dx*5;
                    y+=dy*5;
                }
            }
            ctx.moveto(x,y);
            drawWire(10);
        }

        function drawCapacitor()
        {
            drawWire(22.5);
            ctx.moveto(x+10*dy,y-10*dx);
            x+=dx*5;
            y+=dy*5;
            ctx.moveto(x+10*dy,y-10*dx);
            ctx.moveto(x,y);
            drawWire(22.5);
        }

        function drawInductor()
        {
            var n,xs,ys;
            drawWire(9);
            n=4;
            xs=1+Math.abs(dy);
            ys=1+Math.abs(dx);
            x+=dx*6;
            y+=dy*6;
            ctx.scale(xs,ys);
            while(n--)
            {
                ctx.moveto(x/xs+5*Math.abs(dx),y/ys+5*dy);
                ctx.arc(x/xs,y/ys,5,Math.PI/2*dy,Math.PI+Math.PI/2*dy,1);
                x+=6.5*dx;
                y+=6.5*dy;
                if(n!=0)
                {
                    if(dx>=0)
                    {
                        ctx.moveto(x/xs-5*dx,y/ys-5*dy);
                    }

                    ctx.moveto(x/xs-5*dx,y/ys-5*dy);
                    ctx.arc(x/xs-6.5/2*dx,y/ys-6.5/2*dy,1.5,1);
                }
            }
            ctx.moveto(x/xs-1.75*dx,y/ys-1.75*dy);
            ctx.scale(1/xs,1/ys);
            ctx.lineto(x,y);
            drawWire(9);
        }

        function drawTrimmer()
        {
            ctx.moveto(x+35*dx-7*dy,y+35*dy-7*dx);
            ctx.lineto(x+15*dx+7*dy,y+15*dy+7*dx);
            ctx.moveto(x+13*dx+4*dy,y+13*dy+4*dx);
            ctx.lineto(x+17*dx+10*dy,y+17*dy+10*dx);
            ctx.moveto(x,y);
            drawCapacitor();
        }

        function drawResistor()
        {
            var n;
            drawWire(10);
            n=5;
            x+=dx*5;
            y+=dy*5;
            while(n--)
            {
                ctx.lineto(x-5*dy,y-5*dx);
                ctx.lineto(x+5*dy,y+5*dx);
                x+=5*dx;
                y+=5*dy;
            }
            ctx.lineto(x,y);
            drawWire(10);
        }

        function turnClockwise()
        {
            d++;
            dx=Math.cos(1.570796*d);
            dy=Math.sin(1.570796*d);
        }

        function turnCounterClockwise()
        {
            d--;
            dx=Math.cos(1.570796*d);
            dy=Math.sin(1.570796*d);
        }

然后创建一个新的< script type =“text / javascript”> ….< / script>标记并在标记之间放置您的绘图代码.绘图代码的工作方式如下:

首先调用函数beginCircuit(x,y).在括号内,将想要启动电路的x和y坐标放在,如下所示:beginCircuit(200,100).这将在您指定的坐标处绘制电线和电池(以像素为单位).电池和电线一起占据屏幕上100个像素的空间.

然后,您可以调用以下任何功能:

drawWire(长度)

绘制一条在电路末端指定长度的导线.占用空间长度.

turnClockwise(长度)

转动下一个命令顺时针旋转90°的方向.没有空间.

turnCounterClockwise(长度)

转动下一个命令逆时针旋转90°的方向.没有空间.

drawCapacitor(长度)

在电路末端画一个电容.占50px.

drawInductor(长度)

在电路末端绘制一个电感.占50px.

drawResistor(长度)

在电路末端画一个电阻.占50px.

drawTrimmer(长度)

在电路末端画一个电阻.占50px.

完成绘图电路后,使用函数endCircuit()关闭然后绘制电路.它会自动从您停止的点到电路的开始画一条线.

我知道这很多事情要做,但是一旦理解了它,这真的是一种非常简单灵活的方法.如果你想看到这个,请到这里:http://jsfiddle.net/mindoftea/ZajVE/.请试一试,如果你有问题,请评论一下.

谢谢,希望这有帮助!

HTML5 – 渲染简单的电路的更多相关文章

  1. canvas简单连线动画的实现代码

    这篇文章主要介绍了canvas简单连线动画的实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  2. ios – 无论设备方向如何,物体落在地球上

    使用CoreMotion框架,我已经看到了两种方式来描述不同设备方向的落后对象行为.我已经在代码中尝试过这两个版本,它们似乎都像我期望的一样,即不论设备方向如何,都落在地球上.我只是好奇为什么两个版本的行为都一样,即使在第一个版本中,x和y方向的加速度,即dx和dy,是以横向切换的?1)2)解决方法我想你正在使用模拟器,所以重力总是与底部正交.在真实的设备上,行为应该有所不同,因为您将始终至少轻轻地倾斜设备.

  3. 运行Android Studio项目时出现DX错误

    我正在尝试使用其依赖项设置我的AndroidStudio项目.但是,当我尝试运行我的项目时,我收到以下错误消息:任何人都可以帮助我解决方法检查是否多次添加相同的jar文件.如果是,请从libs文件夹中删除其中任何一个并清理项目.

  4. 从命令行管理android项目

    我在不使用ant的情况下从命令行管理和运行我的Android应用程序,我按照以下步骤操作:>生成R.java>将src中的R.java和所有.java文件编译为.class文件>使用以下命令将类文件集合成dex文件dx–dex–verbose–output=./bin/classes.dex./bin.class文件位于bin目录中.但是我在这些步骤中遇到以下错误:因此,我无法创建Classes.

  5. 快速实现一个简单的canvas迷宫游戏的示例

    本篇文章主要介绍了快速实现一个简单的canvas迷宫游戏的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  6. 脸部磨皮:一个高阶正则化 ( higher-order regularisation ) 模型的应用

    通过最小化∫Ω|u|dx这一项来进行正则化,被称作totalvariationregularization.在最优解中,它保留了图像的边,同时希望边中间的区域是等值的,因为它的梯度被最小化。因此笔者在此介绍两个高阶模型,它们都是对解函数的二阶导数进行正则化,因此得到的解是一个分段仿射函数。

  7. 如何用IOS检测Fingersize?

    是否可以在IOS应用程序中检测到fingerize?我想要实现的目标:我需要在我的OpenGLES应用程序中使用虚拟“按钮”.如果有人像游戏手柄一样拿着iPhone,他会用一根手指按两个按钮.我希望我的意思是可以理解的……

  8. c – 使用数组避免OpenMP中的虚假共享

    是否有我可以使用的条款,我没有听说过?或者这是我需要重构代码以实现正确的并行化的任务?所有形式的输入将不胜感激!

  9. java – 多个dex文件定义/ BuildConfig,找不到原因:

    我正在使用新的毕业生构建系统,我正面临以下问题:依赖关系我看不到任何东西,这里是:我试图验证问题不是一个重复的支持库,所以我试图添加:哪些导致一些支持-V4库类找不到的错误,所以这个库不能从任何其他位置编译.我想到的一件事可能是导致这个问题的事实是,我使用Flavorsfeautreinoreder来创建我的应用程序的不同版本的文件.当我看到错误中的文件,我看到:所以包中的文件和包中指定的Stri

  10. cocos2dx3.2 android打包apk问题汇总不断更新

    cocos2d-x-3.2\tools\cocos2d-console\bin下的文件都没了,直接拷贝一份新的引擎文件过来吧。UNEXPECTEDTOP-LEVELEXCEPTION:这个时候的解决办法就是更新sdk。

随机推荐

  1. 微信小程序canvas实现水平、垂直居中效果

    这篇文章主要介绍了小程序中canvas实现水平、垂直居中效果,本文图文实例代码相结合给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

  2. 使用HTML5做的导航条详细步骤

    这篇文章主要介绍了用HTML5做的导航条详细步骤,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  3. H5最强接口之canvas实现动态图形功能

    这篇文章主要介绍了H5最强接口之canvas实现动态图形功能,需要的朋友可以参考下

  4. Canvas高级路径操作之拖拽对象的实现

    这篇文章主要介绍了Canvas高级路径操作之拖拽对象的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  5. html5视频自动横过来自适应页面且点击播放功能的实现

    这篇文章主要介绍了h5视频自动横过来自适应页面且点击播放,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  6. 详解HTML5中的picture元素响应式处理图片

    这篇文章主要介绍了详解HTML5中的picture元素响应式处理图片,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  7. canvas像素点操作之视频绿幕抠图

    这篇文章主要介绍了canvas像素点操作之视频绿幕抠图的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  8. html5利用canvas实现颜色容差抠图功能

    这篇文章主要介绍了html5利用canvas实现颜色容差抠图功能,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下

  9. canvas绘制视频封面的方法

    这篇文章主要介绍了canvas绘制视频封面的方法的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  10. HTML5拖拽功能实现的拼图游戏

    本文通过实例代码给大家介绍了HTML5拖拽功能实现的拼图游戏,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧

返回
顶部