討論區快速選單
知識庫快速選單
政府補助!學嵌入式+物聯網 網路投保旅行平安險 討論區最近新進100則主題
[ 回上頁 ] [ 討論區發言規則 ]
在某區塊內隨機形成一個三頂點座標的三角形
更改我的閱讀文章字型大小
作者 : j411008k(ㄚ和)
[ 貼文 5 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2015/5/3 下午 07:46:43
前輩們您好:

小弟想請教C程式的問題,如下:

我有一個區間範圍40*40mm的x.y邊界,那我要這區間內隨機形成三個座標頂點,而這三個頂點可形成一個三角形,那我要如何設計這C程式。另外這三個隨機的頂點座標要可以輸出,也就是可以知道這座標為何。

我這主要是應用於單晶片內,它的編輯語言就是c,提問的這個程式問題已經卡了小弟很久,煩請各位前輩賜教,讓我可以解決問題外,還可以學習到這程式的設計方式,感謝各位前輩。
作者 : sflam(Raymond)討論區板主 Visual C++ .NET卓越專家VC++一代宗師新手入門優秀好手資訊類作業求救頂尖高手C++一代宗師貼文超過4000則
[ 貼文 4944 | 人氣 9172 | 評價 32280 | 評價/貼文 6.53 | 送出評價 142 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人j411008k註記此篇回應為很有道理 2015/5/3 下午 09:45:28
隨機產生兩個點, 第三個點產生時才檢查它是否在前兩個點產生的直線上. 直線的檢查也很簡單, 應用斜率即可:

當:
  (x2 - x1) * (y3 - y1) == (y2 - y1) * (x3 - x1)
三點在一直線.
作者 : j411008k(ㄚ和)
[ 貼文 5 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2015/5/8 上午 01:04:28
大大您好:

小弟其實是程式新手,這問題雖然簡單,但是我卻寫不出來,可否請賜教,感謝您的幫忙!!
作者 : ozzy123(ozzy) 資訊類作業求救卓越專家C++卓越專家貼文超過4000則人氣指數超過30000點
[ 貼文 4462 | 人氣 37262 | 評價 10860 | 評價/貼文 2.43 | 送出評價 49 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2015/5/8 上午 10:01:52
would you please describe your question in detail ?
作者 : sflam(Raymond)討論區板主 Visual C++ .NET卓越專家VC++一代宗師新手入門優秀好手資訊類作業求救頂尖高手C++一代宗師貼文超過4000則
[ 貼文 4944 | 人氣 9172 | 評價 32280 | 評價/貼文 6.53 | 送出評價 142 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人j411008k註記此篇回應為很有道理 2015/5/8 上午 11:06:30
>小弟其實是程式新手,這問題雖然簡單,但是我卻寫不出來,可否請賜教,感謝您的幫忙!!

每個人都是從新手過來的. 直接給你程式你就學不到東西. 盡量自己寫, 有問題的話貼出你完整的程式再發問.

作者 : ozzy123(ozzy) 資訊類作業求救卓越專家C++卓越專家貼文超過4000則人氣指數超過30000點
[ 貼文 4462 | 人氣 37262 | 評價 10860 | 評價/貼文 2.43 | 送出評價 49 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人j411008k註記此篇回應為很有道理 2015/5/8 上午 11:46:01
an algorithm for you reference :

assume there are three points p1, p2, and p3 and their coordinates are (x1,y1), (x2,y2) and (x3,y3) .
and x and y coordinate's value is between 0 and 40.
first, you may use a random seed generator to generate x and y's value. In C , you should include a header file - stlib.h and about the usage of it , you may refer to this url - http://dhcp.tcgs.tc.edu.tw/c/p005.htm
above step is a precondition. you must make sure their values are correct.
again, these three points p1,p2,and p3 should generate 3 lines and they must are different. So you may get their slopes .
The calculation of slope is : yj-yi / xj-xi ; i , j = 1,2,3 and j > i . And you may get three slope values. Finally , you may use an easy expression as below
(m1!=m2)&&(m2!=m3)&&(m3!=m1) is true , then it is an available triangle; otherwise , it isn't a triangle.

   

 
作者 : ozzy123(ozzy) 資訊類作業求救卓越專家C++卓越專家貼文超過4000則人氣指數超過30000點
[ 貼文 4462 | 人氣 37262 | 評價 10860 | 評價/貼文 2.43 | 送出評價 49 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人j411008k註記此篇回應為很有道理 2015/5/8 下午 03:49:59
according to above post , you may code some codes , such like :

#include <stdio.h>
#include <stdlib.h>

int main()
{
  int x1,x2,x3 ; // x coordinates
  int y1,y2,y3 ; // y coordinates
   

  // you should write following codes
  // To get x1 to x3's value by random seed generator , the usage , please refer to
  // above link . You should code them yourself.
  // Likewise , y1 to y3's value also get by random seed generator
  // The formula of slope m = yj- yi / xj - xi ; it means the slope of line from (xi,yi) to (xj,yj) , if start point is (xi,yi) and end point is
  // (xj,yj). basically , you must calculate three slopes ( because a triangle owns three sides (lines) ).
  // Finally , you should use a formula and check whether they are equal or not. ( if one of them is equal , these three points can't
  // construct a triangle.

  
return 0 ; // exit main normally

} // end of main

作者 : kagaya(kagaya) VC++優秀好手C++優秀好手貼文超過1000則人氣指數超過30000點
[ 貼文 1597 | 人氣 38709 | 評價 4590 | 評價/貼文 2.87 | 送出評價 115 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人j411008k註記此篇回應為很有道理 2015/5/8 下午 04:08:16
單晶片哪來的 stdio.h stdlib.h ?




作者 : ozzy123(ozzy) 資訊類作業求救卓越專家C++卓越專家貼文超過4000則人氣指數超過30000點
[ 貼文 4462 | 人氣 37262 | 評價 10860 | 評價/貼文 2.43 | 送出評價 49 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2015/5/8 下午 05:04:24
http://www.keil.com/support/man/docs/c51/c51_rand.htm
作者 : ozzy123(ozzy) 資訊類作業求救卓越專家C++卓越專家貼文超過4000則人氣指數超過30000點
[ 貼文 4462 | 人氣 37262 | 評價 10860 | 評價/貼文 2.43 | 送出評價 49 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2015/5/8 下午 05:15:04
http://www.mcufan.com/article/keil%20software%20c51book.pdf , page 231
Porting C standard library is a old news if you have been developed C compiler for MCU.
作者 : ozzy123(ozzy) 資訊類作業求救卓越專家C++卓越專家貼文超過4000則人氣指數超過30000點
[ 貼文 4462 | 人氣 37262 | 評價 10860 | 評價/貼文 2.43 | 送出評價 49 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2015/5/8 下午 05:34:53
http://ww1.microchip.com/downloads/en/DeviceDoc/MPLAB_C18_Libraries_51297f.pdf

microchip C18 c compiler , p117 shows stdlib.h path
作者 : ozzy123(ozzy) 資訊類作業求救卓越專家C++卓越專家貼文超過4000則人氣指數超過30000點
[ 貼文 4462 | 人氣 37262 | 評價 10860 | 評價/貼文 2.43 | 送出評價 49 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2015/5/8 下午 05:50:13
http://webcache.googleusercontent.com/search?q=cache:HtVtn0J7XBQJ:ftp.axis.com/pub/users/hp/pgccfd/old/pgccfd-0.3.ps+&cd=44&hl=zh-TW&ct=clnk&gl=tw

a guideline about porting GNU C compiler for beginners .
作者 : sflam(Raymond)討論區板主 Visual C++ .NET卓越專家VC++一代宗師新手入門優秀好手資訊類作業求救頂尖高手C++一代宗師貼文超過4000則
[ 貼文 4944 | 人氣 9172 | 評價 32280 | 評價/貼文 6.53 | 送出評價 142 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人j411008k註記此篇回應為很有道理 2015/5/9 上午 08:02:54
>The calculation of slope is : yj-yi / xj-xi ; i , j = 1,2,3 and j > i . And you may get three slope values. Finally , you may use an easy expression as below
>(m1!=m2)&&(m2!=m3)&&(m3!=m1) is true , then it is an available triangle; otherwise , it isn't a triangle.

理論上是沒有錯. 但不適合用在程式語言: (yj-yi) / (xj-xi) 不可能用整數除法, 一定是用浮點除法, 但因為浮點數不可能精確表示, 後面的 (m1!=m2)&&(m2!=m3)&&(m3!=m1) 就有問題.

比較好的邏輯是避免用除法, 參考我上面的回覆.

另外, 三個點是否在一直線, 只需檢查兩個斜率.

 板主 : Daniel
 > 資訊類作業 - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - 資訊類作業 - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
資訊類作業
1 Raymond 4540 
2 Ben 2880 
3 青衫 2260 
4 ozzy 1540 
5 HKLN.net 1010 
6 Daniel 780 
7 joe 740 
8 小朱 570 
9 Benson 440 
10 鬼翼@娃娃魚 400 
資訊類作業
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2018 程式設計俱樂部 http://www.programmer-club.com.tw/
0.078125