基于as3实现的简单3d地球

 

经过我一天的努力 总算是弄好了 哈哈 虽然很菜,但是总算弄出个东西了,这个是以x轴为中心点转动,暂时没有加进交互。

 

ContractedBlock.gif ExpandedBlockStart.gif Code
  1 package
  2 {
  3     import __AS3__.vec.Vector;
  4     
  5     import flash.display.Bitmap;
  6     import flash.display.Sprite;
  7     import flash.display.StageAlign;
  8     import flash.display.StageScaleMode;
  9     import flash.display.TriangleCulling;
 10     import flash.events.Event;
 11     
 12     [SWF(backgroundColor=0x000000, width=800, height=800)]
 13     public class ImageSphere1 extends Sprite
 14     {
 15         [Embed(source="map.jpg")]
 16         private var ImageClass:Class;
 17         
 18         private var vertices:Vector.<Number> = new Vector.<Number>();
 19         private var indices:Vector.<int> = new Vector.<int>();
 20         private var uvtData:Vector.<Number> = new Vector.<Number>();
 21         private var bitmap:Bitmap;
 22         private var sprite:Sprite;
 23         private var centerZ:int = 500;
 24         private var cols:int = 20;
 25         private var rows:int =20;
 26         private var focalLength:Number = 1000;
 27         private var radius:Number = 200;
 28         private var offset:int = 0;
 29         private var zSaver:Array=[];
 30         private var xSaver:Array=[];
 31         private var ySaver:Array=[];
 32         private var DAngle:Number = .02;
 33         public function ImageSphere1()
 34         {
 35             stage.align = StageAlign.TOP_LEFT;
 36             stage.scaleMode = StageScaleMode.NO_SCALE;
 37             
 38             sprite = new Sprite();
 39             sprite.x = 400;
 40             sprite.y = 400;
 41             addChild(sprite);
 42             
 43             bitmap= new ImageClass() as Bitmap;
 44             makeTriangles();
 45             
 46             
 47         }
 48         
 49     private function onEnterFrame(event:Event):void
 50         {
 51             draws();
 52         }
 53         
 54 
 55         private function makeTriangles():void
 56         {   vertices.length = 0;
 57             uvtData.length = 0;
 58             var zpos:Number =0;
 59             var ypos:Number =0;
 60             var xpos:Number = 0;
 61             for(var i:int = 0; i < rows; i++)
 62             {
 63                 for(var j:int = 0; j < cols; j++)
 64                 {
 65                     if(i < rows - 1 && j < cols - 1)
 66                     {
 67                         indices.push(i * cols + j,
 68                                      i * cols + j + 1,
 69                                     (i + 1* cols + j);
 70                                     
 71                         indices.push(i * cols + j + 1,
 72                                     (i + 1* cols + j + 1,
 73                                     (i + 1* cols + j);
 74                         
 75                     }
 76 
 77                         var angle:Number =Math.PI *2/ (rows - 1* j;
 78                         var dR:Number=2*radius/(rows-1);
 79                         var scale:Number =0;
 80                          
 81                                  ypos=   radius-i*dR;
 82                                  ySaver.push(ypos);
 83                                  
 84                                  zpos= Math.cos(angle)*Math.sqrt(radius*radius-ypos*ypos);
 85                                  zSaver.push(zpos);
 86                                  
 87                                  xpos= Math.sin(angle)*Math.sqrt(radius*radius-ypos*ypos);
 88                                  xSaver.push(xpos);
 89                                    
 90                                   scale= focalLength / (focalLength + zpos + centerZ);
 91                                  vertices.push(xpos * scale, ypos * scale);
 92                                  
 93                                  uvtData.push(j / (cols - 1), i / (rows - 1));
 94                                  uvtData.push(scale);
 95                                 
 96 
 97                 }//for
 98             }//for
 99        
100             sprite.graphics.clear();
101 
102             
103         sprite.graphics.lineStyle(15, .8);
104         //graphics.beginFill(0xFF8F05);
105         sprite.graphics.drawTriangles(vertices, indices, uvtData);
106          trace("ini is:",vertices);
107              addEventListener(Event.ENTER_FRAME, onEnterFrame);
108         }//f ends
109         
110         private function draws():void
111         {    
112 
113             offset++;
114             if(offset>=1) {
115             
116             offset=0;
117             vertices.length = 0;
118 
119             
120             
121         for(var i:int = 0; i < zSaver.length; i++)
122             {
123                          
124                          
125                         ySaver[i]= Math.cos(DAngle)*ySaver[i]-Math.sin(DAngle)*zSaver[i];
126                         
127                         zSaver[i]= Math.cos(DAngle)*zSaver[i]+Math.sin(DAngle)*ySaver[i];
128                         
129                         var scale:Number= focalLength / (focalLength +  zSaver[i] + centerZ);
130                         vertices.push(xSaver[i] * scale, ySaver[i] * scale); 
131                         if(i*3+2<=uvtData.length) uvtData[i*3+2]=scale;
132                                 
133             }
134 
135             sprite.graphics.clear();
136             
137             sprite.graphics.beginBitmapFill(bitmap.bitmapData);
138             //sprite.graphics.beginFill(0x628f06);
139             //
140             sprite.graphics.drawTriangles(vertices, indices,uvtData, TriangleCulling.NEGATIVE);
141             sprite.graphics.endFill();
142            // sprite.graphics.lineStyle(1, 5, .8);
143             //graphics.beginFill(0xFF8F05);
144             //sprite.graphics.drawTriangles(vertices, indices, uvtData, TriangleCulling.NEGATIVE);
145             trace(uvtData.length);
146             trace(zSaver.length);
147             }
148         }//f end
149         
150     }
151 }

转载于:https://www.cnblogs.com/sun11086/archive/2009/03/04/1403091.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是基于PyTorch实现3D DenseNet代码示例: ```python import torch import torch.nn as nn import torch.nn.functional as F class Bottleneck(nn.Module): def __init__(self, in_channels, growth_rate): super(Bottleneck, self).__init__() self.bn1 = nn.BatchNorm3d(in_channels) self.conv1 = nn.Conv3d(in_channels, 4 * growth_rate, kernel_size=1, bias=False) self.bn2 = nn.BatchNorm3d(4 * growth_rate) self.conv2 = nn.Conv3d(4 * growth_rate, growth_rate, kernel_size=3, padding=1, bias=False) def forward(self, x): out = self.conv1(F.relu(self.bn1(x))) out = self.conv2(F.relu(self.bn2(out))) out = torch.cat([out, x], 1) return out class DenseBlock(nn.Module): def __init__(self, in_channels, growth_rate, num_layers): super(DenseBlock, self).__init__() self.layers = nn.ModuleList([Bottleneck(in_channels + i * growth_rate, growth_rate) for i in range(num_layers)]) def forward(self, x): for layer in self.layers: x = layer(x) return x class Transition(nn.Module): def __init__(self, in_channels, out_channels): super(Transition, self).__init__() self.bn = nn.BatchNorm3d(in_channels) self.conv = nn.Conv3d(in_channels, out_channels, kernel_size=1, bias=False) self.pool = nn.AvgPool3d(kernel_size=2, stride=2) def forward(self, x): out = self.conv(F.relu(self.bn(x))) out = self.pool(out) return out class DenseNet3D(nn.Module): def __init__(self, growth_rate=32, block_config=(6, 12, 24, 16), num_classes=100): super(DenseNet3D, self).__init__() self.conv1 = nn.Conv3d(3, 64, kernel_size=7, stride=2, padding=3, bias=False) self.bn1 = nn.BatchNorm3d(64) self.pool1 = nn.MaxPool3d(kernel_size=3, stride=2, padding=1) self.dense1 = DenseBlock(64, growth_rate, block_config[0]) self.trans1 = Transition(256, 128) self.dense2 = DenseBlock(128, growth_rate, block_config[1]) self.trans2 = Transition(512, 256) self.dense3 = DenseBlock(256, growth_rate, block_config[2]) self.trans3 = Transition(1024, 512) self.dense4 = DenseBlock(512, growth_rate, block_config[3]) self.avgpool = nn.AdaptiveAvgPool3d((1, 1, 1)) self.fc = nn.Linear(1024, num_classes) def forward(self, x): out = self.conv1(x) out = self.bn1(out) out = F.relu(out) out = self.pool1(out) out = self.dense1(out) out = self.trans1(out) out = self.dense2(out) out = self.trans2(out) out = self.dense3(out) out = self.trans3(out) out = self.dense4(out) out = self.avgpool(out) out = out.view(out.size(0), -1) out = self.fc(out) return out ``` 这个代码实现了一个3D DenseNet模型,与2D DenseNet相似,但在处理3D数据时使用了3D卷积和3D池化操作。模型中的Bottleneck、DenseBlock、Transition和DenseNet部分与2D版本相同,只是相关操作被调整为适应3D数据。在实现过程中,我们使用了PyTorch提供的3D版本的各种模块和函数,如nn.BatchNorm3d、nn.Conv3d、nn.AvgPool3d、nn.AdaptiveAvgPool3d等,这些工具和接口可用于构建和训练3D DenseNet模型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值