广告广告
  加入我的最爱 设为首页 风格修改
首页 首尾
 手机版   订阅   地图  繁体 
您是第 3900 个阅读者
 
发表文章 发表投票 回覆文章
  可列印版   加为IE收藏   收藏主题   上一主题 | 下一主题   
tk7545
个人文章 个人相簿 个人日记 个人地图
小人物
级别: 小人物 该用户目前不上站
推文 x0 鲜花 x0
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片
推文 x0
[C/C++][求助] C语言 当范围超过时结束当下回圈 详细问题请入内
大大们好:

       我所附上的程式码主要是用来求曲线,运用于运动分析上面,至于这些倒是没有那么重要

       以例子:输入参数 m:3,Nr:3,曲线起始位置 st:70;来输入运算theta值

       可得下图:

 
               由图可知曲线之值在正180跟负180之间

这次想要请教大大的问题:            
    小弟原本希望当值超过正90以及小于负90时,则跳出当下回圈继续跑下一个回圈,也就是超过正90以及负90时不存档!

    但苦在小弟对这部份一直无法找到正确办法,又急迫需要此修改后之曲线如下图,则在存档程式的前面加上一偷吃步的程式码!

    小弟希望各位大大能帮忙小弟想看看,如何在当值超过正90以及小于负90时,则跳出当下回圈继续跑下一个回圈,也就是超过正90以及负90时跳出存档计算下一步!

if(-90>theta or theta>90) theta=0; //将值直接视为0以当成跳出回圈无存档(不过是假装的),加了这段对往后计算不太好,相关曲线会一并连到零!!


..

访客只能看到部份内容,免费 加入会员 或由脸书 Google 可以看到全部内容




献花 x0 回到顶端 [楼 主] From:台湾教育部 | Posted:2010-01-31 15:57 |
dlc
数位造型
个人文章 个人相簿 个人日记 个人地图
小人物
级别: 小人物 该用户目前不上站
推文 x0 鲜花 x7
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

请善用 continue, break..

如果在-90到90之间要结束回圈, 请用 if(-90>theta or theta>90) break;

如果在-90到90之间不执行回圈内的东西, 请用 if(-90>theta or theta>90) continue;

放置的地方就看你自己的需要了


献花 x0 回到顶端 [1 楼] From:台湾新世纪资通 | Posted:2010-02-02 10:29 |
tk7545
个人文章 个人相簿 个人日记 个人地图
小人物
级别: 小人物 该用户目前不上站
推文 x0 鲜花 x0
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

我知道要用这两个指令,但是摆不到好位置

而且这样真的可以吗??

我有试过大大说的方法,这样乱摆ㄧ定会破坏存档的结构

谢谢大大!!表情


献花 x0 回到顶端 [2 楼] From:台湾中华电信 | Posted:2010-02-02 18:47 |
totsi
数位造型
个人文章 个人相簿 个人日记 个人地图
小人物
级别: 小人物 该用户目前不上站
推文 x0 鲜花 x53
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

"超过正90以及负90时不存档"指的是Theta超过你定的范围后不写入档案是吧?

如果是的话,那底下的code你看一下是不是符合你的需求
复制程式
int main(int argc, char* argv[])
{
       FILE *pfile1 = fopen("theta.txt","w");
       int i,j,k; 
        float theta,DX,m,Nr,st; 
       bool IsOutOffRange = false;

       cout <<"m:"<<endl;
       cin >> m;
       cout <<"Nr:"<<endl;
       cin >> Nr; 
       cout <<"st:"<<endl;
       cin >> st;  

   for( i=1 ; i<=360;i++)
   {
          IsOutOffRange = false;       //Initialized before using
          fprintf(pfile1,"%d  ",i);     
        
       DX=(i-st)/140;

         for( j = 1 ; j <= m ; j++ )
               {        
              for( k = 1 ; k <= Nr ; k++ )
              {          
                               if( i>=1 && i<st)
                                      theta=40+(360/(m*Nr))*(j-1)+(360/Nr)*(k-1);
                                      if(theta>180) { theta=theta-360; };
                          
                               if( i>=st && st<210) 
                                      theta=40+(360/(m*Nr))*(j-1)+(360/Nr)*(k-1)+DX*360;
                                      if(theta>180) { theta=theta-360; };

                               if( i>=210 && 210<=360){ //NOTE:210一定会小于360
                                      theta=40+(360/(m*Nr))*(j-1)+(360/Nr)*(k-1);
                                      if(theta<180)
                                                 theta=40+(360/(m*Nr))*(j-1)+(360/Nr)*(k-1)+360;
                               } 

                               if(theta>180) { theta=theta-360; };
                               if(-90<theta || theta>90) 
                               {
                                      theta=0;
                                      IsOutOffRange = true;
                                      break;       //break to section of for( k = 1 ; k <= Nr ; k++ )
                               }
                               fprintf(pfile1,"%3.3f  ",theta); 
                       }       //End of for( k = 1 ; k <= Nr ; k++ )
                       if ( IsOutOffRange ) { break; };       //break to section of for( i=1 ; i<=360;i++) ->如果没资料时不用换行的话,这行就留着
              fprintf(pfile1,"\n");      
               }       //End of for( j = 1 ; j <= m ; j++ )
   }       //End of for( i=1 ; i<=360;i++)

       fclose(pfile1); 
       system("pause"); 
       return 0;
} 

希望对您有帮助 表情


恩...
献花 x1 回到顶端 [3 楼] From:台湾中华电信 | Posted:2010-02-03 17:18 |
tk7545
个人文章 个人相簿 个人日记 个人地图
小人物
级别: 小人物 该用户目前不上站
推文 x0 鲜花 x0
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

谢谢Totsi大大

  程式输出的theta.txt档结构改变了,已经无法用excel来画出我那张图了

  由于我存档要一定的格式,才能得到那张图,不过大大的方法很好,谢谢 表情

祝顺心/


献花 x0 回到顶端 [4 楼] From:台湾教育部 | Posted:2010-02-04 10:56 |
totsi
数位造型
个人文章 个人相簿 个人日记 个人地图
小人物
级别: 小人物 该用户目前不上站
推文 x0 鲜花 x53
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

我发觉应该是我的理解能力变差了,因为你上面这篇回的内容我看不大懂 表情

不过画图方式跟存档格式其实是不相关的啦。

也就是说,档案读取进来后(Loader)在透过解析器(parser)将档案内容塞给给画图使用的结构(struct)之后。

画图的人(paiter)在将结构(也可是另外的档案格式)内的东西依照他要画的方式画出来就好。

Ex:
Input file format:
Theta = 0 1 2 3
Value = 0.0 5.8 4.2

Loader=
structThetaData[0].Angle = 0;
structThetaData[0].Val = 0.0;
structThetaData[1].Angle = 1;
structThetaData[1].Val = 5.8;
.
.
etc.

Painter(此处输出成csv档)
Format:
Theta   Value
  0     0.0
  1     5.8
  .       .
  .       .

复制程式
char szBuf[16];
//省略开档..要用记得要加
for ( unsigned int i = 0 ; i < 4 ; i++ ) //4为目前array的size
{
  fprintf(FID, "%s,%s\n", structThetaData[i].Angle, structThetaData[i].Value);
}
//省略关档..要用记得要加
这样输出的档案就可以用Excel开启了,所以一样可画图噜. 表情

就记得,资料与动作是可分开的。 表情


恩...
献花 x0 回到顶端 [5 楼] From:台湾中华电信 | Posted:2010-02-09 08:59 |
tk7545
个人文章 个人相簿 个人日记 个人地图
小人物
级别: 小人物 该用户目前不上站
推文 x0 鲜花 x0
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

谢谢大大

  从输出档案.txt就可以发现程式破坏了原本存档的格式,原本有九排答案

  也就是如图上所示会有九条线,但现在该输出的东西的东西都不见了

  大大说可以另外写一个动作重新输出档案,能够让excel开启来画图,但画出来的图形会跟我原先的一样吗?

    大大上面的程式我不太懂,再次麻烦大大为我解说一下 表情   谢谢大大

祝新年快乐/


献花 x0 回到顶端 [6 楼] From:台湾教育部 | Posted:2010-02-09 12:42 |
totsi
数位造型
个人文章 个人相簿 个人日记 个人地图
小人物
级别: 小人物 该用户目前不上站
推文 x0 鲜花 x53
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

看来我看懂你的问题了,你的意思应该是说,程式那样改完之后,有九条线不见了?!

我说的那个方法只的是你输出的档案格式有所变更的时候可以用的,所以如果你的问题如我所述,那么要看的地方是程式内容。

我跑了一下,有发现是判断是造成的。

所以这边要麻烦您提供更详细的题目说明,例如输入是什么,每项计算动作是在算什么,有判断的地方为何需要这样判断等等相关资讯

这样要帮你看问题也比较方便。

表情


恩...
献花 x0 回到顶端 [7 楼] From:台湾中华电信 | Posted:2010-02-09 14:20 |
tk7545
个人文章 个人相簿 个人日记 个人地图
小人物
级别: 小人物 该用户目前不上站
推文 x0 鲜花 x0
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

大大您好:

       程式主架构主要是一主回圈从1跑到360

       当1到st(70)这个区段时线段为0

       st(70)到209时会以递增的方式累加到Y轴为360

       210到360时线段为360

       之后我写一个判断式当线段值超过180时则减掉180

       在来会得到值是在正180与负180之间

      又以值为正180与负180时

       判断当超过90或是小于负90时我的值将会归零

      之后就会得到贴上去的那张图

      但是不想当超过90或是小于负90时把值归零而是要直接跳出回圈继续下一步骤

      大大真的是很感谢你也>"<  肯为我想办法

      另外不是大大理解能力变差,是我不太会表达很抱歉表情


献花 x0 回到顶端 [8 楼] From:台湾教育部 | Posted:2010-02-22 11:39 |
totsi
数位造型
个人文章 个人相簿 个人日记 个人地图
小人物
级别: 小人物 该用户目前不上站
推文 x0 鲜花 x53
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

如果照你所说的"不想当超过90或是小于负90时把值归零而是要直接跳出回圈继续下一步骤"
我用你的程式跑出来有值的地方如下,其他的都没有值。
复制程式
94  

-178.286  
95  

-175.714  
96  

-173.143  
97  

-170.571  
98  

-168.000  
99  

-165.429  
100  

-162.857  
101  

-160.286  
102  

-157.714  
103  

-155.143  
104  

-152.571  
105  

-150.000  
106  

-147.429  
107  

-144.857  
108  

-142.286  
109  
-179.714  
-139.714  
110  
-177.143  
-137.143  
111  
-174.571  
-134.571  
112  
-172.000  
-132.000  
113  
-169.429  
-129.429  
114  
-166.857  
-126.857  
115  
-164.286  
-124.286  
116  
-161.714  
-121.714  
117  
-159.143  
-119.143  
118  
-156.571  
-116.571  
119  
-154.000  
-114.000  
120  
-151.429  
-111.429  
121  
-148.857  
-108.857  
122  
-146.286  
-106.286  
123  
-143.714  
-103.714  
124  
-141.143  
-101.143  
125  -178.571  
-138.571  
-98.571  
126  -176.000  
-136.000  
-96.000  
127  -173.429  
-133.429  
-93.429  
128  -170.857  
-130.857  
-90.857  
129  -168.286  
-128.286  

130  -165.714  
-125.714  

131  -163.143  
-123.143  

132  -160.571  
-120.571  

133  -158.000  
-118.000  

134  -155.429  
-115.429  

135  -152.857  
-112.857  

136  -150.286  
-110.286  

137  -147.714  
-107.714  

138  -145.143  
-105.143  

139  -142.571  
-102.571  

140  -140.000  
-100.000  

141  -137.429  
-97.429  

142  -134.857  
-94.857  

143  -132.286  
-92.286  

144  -129.714  


145  -127.143  


146  -124.571  


147  -122.000  


148  -119.429  


149  -116.857  


150  -114.286  


151  -111.714  


152  -109.143  


153  -106.571  


154  -104.000  


155  -101.429  


156  -98.857  


157  -96.286  


158  -93.714  

然后您提供的程式是当角度大于180时,是把角度减去360,而非您在上一篇回覆所说的180。

问题看起来像是数值分析的东西。您是否可提供计算用的方程式或是问题本身的描述(而不是单纯只有计算过程)。
因为您的程式码里面有太多的常数,所以定义看不懂的话,也很难帮您改。
或者是你自己有画流程图,有的话一并提供会比较好。
希望对您有帮助 表情


[ 此文章被totsi在2010-02-24 08:45重新编辑 ]

此文章被评分,最近评分记录
财富:50 (by 三仙) | 理由: 谢谢 totsi 大热心的帮忙解惑 ^^


恩...
献花 x1 回到顶端 [9 楼] From:台湾中华电信 | Posted:2010-02-22 17:12 |

首页  发表文章 发表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.064993 second(s),query:16 Gzip disabled
本站由 瀛睿律师事务所 担任常年法律顾问 | 免责声明 | 本网站已依台湾网站内容分级规定处理 | 连络我们 | 访客留言