离散点外包凸多边形生成算法(C#或者C++),要有详细代码和说明,最好有可运行的样例程序好的另外加分,急

离散点外包凸多边形生成算法(C#或者C++),要有详细代码和说明,最好有可运行的样例程序好的另外加分,急,第1张

find&&find_if

临时对象——构造函数的调用.根据若干个离散点创建最大外包凸多边形图形算法

//卷包裹法---创建最大外包凸多边形

//stdafx.h

#define PI 3.1415926

#define NULL 0

#define LEN sizeof(struct XYpoint)

long pointSum

struct XYpoint

{

double x

double y

struct XYpoint *next

}

XYpoint *creat(void)

struct XYpoint *insert(struct XYpoint *head2,struct XYpoint *p)

struct XYpoint *del(struct XYpoint *head,struct XYpoint *p)

struct XYpoint *miny(struct XYpoint *head)

double angle(struct XYpoint *a,struct XYpoint *b,struct XYpoint *c)

double dis(struct XYpoint *a,struct XYpoint *b)

struct XYpoint *tank( struct XYpoint *head ,struct XYpoint *head2)

struct XYpoint *convexHull( struct XYpoint *head ,struct XYpoint *head2)

void print(struct XYpoint *head2)

//stdafx.cpp

#include "stdafx.h"

#include <math.h>

#include <vector>

//using namespace std

struct XYpoint *creat(void)

{

struct XYpoint *head

struct XYpoint *p1,*p2

FILE *fp

if((fp=fopen("in_put.txt","r"))==NULL)

{

printf("can not open the file\n")

exit(0)

}

pointSum=0

p1=p2=(struct XYpoint *)malloc(LEN)

fscanf(fp,"%lf,%lf",&p1->x,&p1->y)

head=NULL

while(!feof(fp))

{

pointSum=pointSum+1

if(pointSum==1)

head=p1

else

p2->next=p1

p2=p1

p1=(struct XYpoint *)malloc(LEN)

fscanf(fp,"%lf,%lf",&p1->x,&p1->y)

}

p2->next=NULL

fclose(fp)

return(head)

}

struct XYpoint *insert(struct XYpoint *head2,struct XYpoint *p)

{

struct XYpoint *p1,*p0

p0=p

p1=head2

while(p1->next!=NULL)

{

p1=p1->next

}

p1->next=p0

p0->next=NULL

if (head2->next==NULL)

printf("not been insert!\n")

return (head2)

}

struct XYpoint *del(struct XYpoint *head,struct XYpoint *p)

{

struct XYpoint *p0,*p1

if(head==NULL)

{

printf("\nlist null\n")

goto end

}

p0=head

while((p->x!=p0->x||p->y!=p0->y)&&p0->next!=NULL)

{

p1=p0

p0=p0->next

}

if(p->x==p0->x&&p->y==p0->y)

{

if(p0==head)

head=p0->next

else

p1->next=p0->next

}

else

printf("not been found!\n")

end:

return (head)

}

struct XYpoint *miny(struct XYpoint *head)

{

double min

struct XYpoint *p,*p1

p=head

min=p->y

p1=p

p=p->next

while (p!=NULL)

{

if (min>p->y)

{min=p->y,p1=p}

else if(min==p->y&&p1->x>p->x)

{min=p->y,p1=p}

else p=p->next

}

return(p1)

}

double angle(struct XYpoint *a,struct XYpoint *b,struct XYpoint *c)

{

struct XYpoint *p0,*p1,*p2

double dsx,dsy,dex,dey,cosfi,norm,fi

p0=a

p1=b

p2=c

dsx=p1->x-p0->x

dsy=p1->y-p0->y

dex=p2->x-p1->x

dey=p2->y-p1->y

cosfi=dsx*dex+dsy*dey

norm=(dsx*dsx+dsy*dsy)*(dex*dex+dey*dey)

cosfi/=sqrt( norm )

fi=acos(cosfi)

if(cosfi<=-1) fi=PI

if(cosfi>=1) fi=0

return(fi)

}

double dis(struct XYpoint *a,struct XYpoint *b)

{

struct XYpoint *p1,*p2

double dsx,dsy,dx

p1=a

p2=b

dsx=p2->x-p1->x

dsy=p2->y-p1->y

dx=sqrt(dsx*dsx+dsy*dsy)

return(dx)

}

struct XYpoint *tank( struct XYpoint *head ,struct XYpoint *head2)

{

double minfi,fi

double dx,dy

struct XYpoint *p,*p1,*p2

p2=p=head

p1=head2

minfi=PI

while(p!=NULL)

{

dx=p->x-p1->x

dy=p->y-p1->y

if(dx!=0)

{

fi=atan(dy/dx)

if(fi<0)

fi=fi+PI

}

else if(dx==0&&dy==0) fi=PI

else fi=PI/2.0

if(minfi>=fi)

{

minfi=fip2=p

}

p=p->next

}

return (p2)

}

struct XYpoint *convexHull( struct XYpoint *head ,struct XYpoint *head2)

{

double min

double tempAngle

struct XYpoint *lastP,*nowP,*p,*p1,*p2

p=head

nowP=p1=head2

lastP=nowP

p1=p1->next

nowP=p1

while(p1->next!=NULL)

{

p1=p1->next

lastP=nowP

nowP=p1

}

min=angle(lastP,nowP,p)

p2=p

p=p->next

while(p!=NULL)

{

tempAngle=angle(lastP,nowP,p)

if (min>tempAngle)

{

min=tempAngle

p2=p

p=p->next

}

else if(min==tempAngle)

{

if(dis(nowP,p2)<dis(nowP,p))

p2=p

p=p->next

}

else

{

p=p->next

}

}

return(p2)

}

void print(struct XYpoint *head2)

{

FILE *fp

struct XYpoint *p

p=head2

if((fp=fopen("out_put.txt","w"))==NULL)

{

printf("can not open the file\n")

exit(0)

}

fprintf(fp,"%ld",pointSum)

fprintf(fp,"\n")

while(p!=NULL)

{

fprintf(fp,"%lf,%lf",p->x,p->y)

fprintf(fp,"\n")

p=p->next

}

fclose(fp)

}

/*

int _tmain(int argc, _TCHAR* argv[])

{

struct XYpoint *head ,*head2,*pp,*qq

head=creat()

pp=miny(head)

head2=(struct XYpoint *)malloc(LEN)

head2->x=pp->x

head2->y=pp->y

head2->next=NULL

pp=tank(head,head2)

qq=(struct XYpoint *)malloc(LEN)

qq->x=pp->x

qq->y=pp->y

qq->next=NULL

head2=insert(head2,qq)

head=del(head,pp)

pp=convexHull(head,head2)

do

{

qq=(struct XYpoint *)malloc(LEN)

qq->x=pp->x

qq->y=pp->y

qq->next=NULL

head2=insert(head2,qq)

head=del(head,pp)

pp=convexHull(head,head2)

}while(!(head2->x==pp->x&&head2->y==pp->y))

print(head2)

return 0

}

*/

//view.h

class CCreateHullView : public CView

{

private:

int m_nPtnum

XYpoint *m_pPtHead

XYpoint *m_pHullHead

}

//view.cpp

CCreateHullView::CCreateHullView()

{

// TODO: add construction code here

m_nPtnum = 0

m_pPtHead = NULL

m_pHullHead = NULL

}

CCreateHullView::~CCreateHullView()

{

if (m_nPtnum >0)

{

XYpoint *p = m_pPtHead

while (NULL != p)

{

m_pPtHead = p->next

p->next = NULL

delete p

p = m_pPtHead

}

m_pPtHead = NULL

m_nPtnum = 0

p = m_pHullHead

while (NULL != p)

{

m_pHullHead = p->next

p->next = NULL

delete p

p = m_pHullHead

}

m_pHullHead = NULL

}

}

void CCreateHullView::OnLButtonDown(UINT nFlags, CPoint point)

{

// TODO: Add your message handler code here and/or call default

if (0 == m_nPtnum)

{

m_pPtHead = new XYpoint

m_pPtHead->x = point.x

m_pPtHead->y = point.y

m_pPtHead->next = NULL

m_nPtnum++

}

XYpoint *p = new XYpoint

p->x = point.x

p->y = point.y

p->next = m_pPtHead

m_pPtHead = p

m_nPtnum++

Invalidate()

CView::OnLButtonDown(nFlags, point)

}

void CCreateHullView::OnCreateHull()

{

// TODO: Add your command handler code here

if (0 <m_nPtnum)

{

struct XYpoint *head ,*head2,*pp,*qq

head = m_pPtHead

pp = miny(head)

head2=(struct XYpoint *)malloc(LEN)

head2->x=pp->x

head2->y=pp->y

head2->next=NULL

pp=tank(head,head2)

qq=(struct XYpoint *)malloc(LEN)

qq->x=pp->x

qq->y=pp->y

qq->next=NULL

head2=insert(head2,qq)

head=del(head,pp)

pp=convexHull(head,head2)

do

{

qq=(struct XYpoint *)malloc(LEN)

qq->x=pp->x

qq->y=pp->y

qq->next=NULL

head2=insert(head2,qq)

head=del(head,pp)

pp=convexHull(head,head2)

}while(!(head2->x==pp->x&&head2->y==pp->y))

//print(head2)

m_pHullHead = head2

Invalidate()

}

}

void CCreateHullView::OnDraw(CDC* pDC)

{

CCreateHullDoc* pDoc = GetDocument()

ASSERT_VALID(pDoc)

// TODO: add draw code for native data here

XYpoint *p = NULL

if (0 <m_pHullHead)

{

p = m_pHullHead

pDC->Rectangle((int)(m_pHullHead->x) - 2, (int)(m_pHullHead->y) - 2, (int)(m_pHullHead->x) + 2, (int)(m_pHullHead->y) + 2)

pDC->MoveTo((int)(m_pHullHead->x), (int)(m_pHullHead->y))

p = m_pHullHead->next

while (NULL != p)

{

pDC->Rectangle(

(int)(p->x) - 2,

(int)(p->y) - 2,

(int)(p->x) + 2,

(int)(p->y) + 2

)

pDC->LineTo(CPoint((int)p->x, (int)p->y))

p = p->next

}

p = m_pHullHead

pDC->LineTo(CPoint((int)p->x, (int)p->y))

}

p = m_pPtHead

while (NULL != p)

{

pDC->Rectangle(

(int)(p->x) - 2,

(int)(p->y) - 2,

(int)(p->x) + 2,

(int)(p->y) + 2

)

// pDC->FillSolidRect(

// (int)(p->x) - 2,

// (int)(p->y) - 2,

// (int)(p->x) + 2,

// (int)(p->y) + 2,

// RGB(225, 0, 0)

// )

p = p->next

}

}

不知道可以不,应该可以运行吧,你先试试

肺腺癌(ADC)是肺癌中最普遍的亚型,占所有病例的46%以上。在分子层面上,ADC的特征是具有复杂的基因组格局。最近的研究集中在深入了解基因组和表观基因组改变的后果以及肿瘤异质性在治疗反应和治疗抵抗中的作用。ADC组织病理学生长模式的分析显示广泛的肿瘤内异质性(ITH)。值得注意的是,尽管在许多情况下发现了多种组织学,但主要的组织形态学生长模式(鳞状,腺泡,乳头状,微乳头状,实体状)具有很高的预后性和预测性。在分子水平上,研究发现驱动程序突变等位基因频率与组织学生长模式之间具有高度相关性。在表观基因组水平上,第一项研究报道了肺ADC中DNA甲基化模式的高肿瘤内异质性。但是,到目前为止,尚未进行ADC中表观基因组学和形态学ITH的比较空间分析。

那么今天我为大家带来这篇文章作者系统地评估了来自七个主要ADC的122个肿瘤的形态生长模式,以评估组织学亚型的空间分布。

(1)患者和样本:作者根据2015年WHO肺癌分类标准(表1),对7位II至IV期ADC患者的肿瘤(n = 27)和非肿瘤(n = 7)组织标本进行了评估。对其中四名患者的六个淋巴结转移进行了类似的评估。病理学家将最大直径的肿瘤切片分为5 x 5 mm的区域并在连续的H&E染色切片上确定每个节段的主要组织学生长模式(定义为百分比最高的模式)。在这七名患者​​中,四名携带KRAS基因突变,三名携带TP53(其中两个是双重突变)。

(2)DNA提取和定量:将来自每个片段的六个连续的未染色的10 µm组织切片去石蜡并用蛋白酶K消化。使用LEV DNA纯化试剂盒进行DNA提取。使用Qubit HS DNA分析确定DNA浓度。

(3)Digital PCR:使用Quantstudio 3D Digital PCR系统利用20 ng模板DNA分析了患者4淋巴结中激活的KRAS G12S突变的存在,并验证了TaqMan SNP基因分型分析。

(4)全局甲基化谱:应用Infinium MethylationEPIC BeadChip 来评估>866,000 CpG位点的全基因组DNA甲基化水平。在DKFZ基因组学和蛋白质组学核心设施中,对来自恶性和正常肺FFPE组织样本的500ng基因组DNA进行亚硫酸氢盐转化并进行甲基化分析。

(5)DNA甲基化数据分析:使用“minfi”R包处理原始甲基化数据。正常样本的甲基化定义为七个匹配的非肿瘤性肺组织样品的平均甲基化。

(6)基因组注释:通过标准的Illumina Infinium甲基化EPIC BeadChip标准进行CpG注释。

(7)无监督分层聚类:使用肿瘤内甲基化差异最大的10,000个探针的β值,进行甲基化水平的无监督分层聚类。聚类采用欧氏距离和平均连锁作为聚类方法。

(8)拷贝数分析:使用R包“conumee”从甲基化和未甲基化的探针信号强度值得出拷贝数分布图。

(9)系统发生树重建:根据肿瘤内甲基化变异的距离矩阵来推断系统发生的关系。使用具有最大肿瘤内甲基化差异的10,000个探针的Beta值来计算DNA甲基化欧几里德距离矩阵。最后使用R包“ape”来构建系统发生树。

(10)差异甲基化分析:使用线性模型来评估肿瘤和肺肿瘤组织中的甲基化差异。使用PANTHER分类系统对差异甲基化基因进行了GO和KEGG分析。

(11)相关性分析:应用Pearson相关系数来估计基于甲基化的距离。

1.  ADC的组织学和表观基因组分析: 为了对组织病理学肿瘤内异质性进行系统表征,作者将7位ADC患者的中央肿瘤切片(表1)解剖为122个肿瘤和34个5 x 5 mm的非肿瘤部分。

靠近转录起始位点(TSSs)的DNA甲基化影响基因活性。为了确定TSS活性,作者将active 和 passive的TSS的甲基化水平与正常肺组织的H3 K4Me3标记进行了比较。结果显示具有K4Me3标记的潜在passive TSS在其TSS周围的1kb区域显示甲基化水平降低,而没有K4Me3标记的位点显示甲基化水平较高(图1 A)。

并且与passive TSS相比,活性(active)位点总体上甲基化水平较低(图1 B):具有K4Me3标记的active TSS处的CpGs显示平均甲基化水平为0.05至0.1,而没有激活组蛋白标记的passive TSS显示平均甲基化水平>0.5。接下来作者比较了非肿瘤组织的平均甲基化水平与患者2的两个腺泡,鳞状,乳头状和实心部分的甲基化。揭示了肿瘤内和组织内的异质性(图1C)。

2.  DNA甲基化分析揭示了广泛的肿瘤内异质性: 在这一部分作者对不同节段和淋巴结转移之间的DNA甲基化模式进行单独评估,发现DNA甲基化具有广泛的肿瘤内异质性,并通过无监督分层聚类来显示结果(图2A)。此外,对患者所有节段的分析进一步说明了同一肿瘤各节段之间的强烈变异性(图2 B)。

为了将异质性程度放在更广泛的背景下,作者对来自TCGA肺腺癌的33个肿瘤区段的启动子区域和369例患者(366个肿瘤和38个正常样品)的相应位点进行了12601个位点的无监督分层聚类。结果显示这些样本没有形成单独的群集,并且个体内的区段彼此之间的相似性仍然不与来自不同个体的区段相似(图3)。

3.  拷贝数变异的异质性: 为了更深入地了解拷贝数变异(CNV)的空间分布,作者基于EPIC阵列数据确定了每个区段的CNV分布图。结果在33个肿瘤区段中的32个中鉴定了具有体细胞拷贝数增减的CNV(图4A)。总体而言,CNV图谱在肿瘤内部比在肿瘤之间更相似。仅患者4的淋巴结转移未显示出具有与匹配的非肿瘤组织相似的特征的CNV。接下来作者基于TCGA数据进一步确定了在肺ADC和潜在的肿瘤驱动CNVs中被鉴定为反复扩增或缺失的基因的拷贝数状态。这项分析表明尽管所有片段均携带至少一个重复扩增或缺失的基因的CNV,却发现了克隆和亚克隆拷贝数得失的片段之间的空间异质性(图4 B)。

4.  基于CNV和DNA甲基化数据的生长模式的克隆进化: 为了深入了解ADC的克隆进化并探索淋巴结转移的组织学起源,作者根据DNA甲基化变化和CNV得出的距离矩阵对40个多区域片段进行了系统发育重建。结果作者在表观遗传水平上观察到ADC的分支进化,在原发肿瘤的生长模式之间具有广泛的克隆多样性(图5 A)。甚至同一增长模式的各个部分也显示出分支演化,表明同一模式在不同区域或不同时间点独立出现(图4 B)。为了进一步探索不同肿瘤区域之间的亚克隆关系不受选择性限制或生态位适应的影响,作者对远离调控元件的基因组位点(n = 83,756)进行了相关分析。相关性证实了肿瘤内的亚克隆关系和广泛变化(图5B)。

为了重建组织形态学模式的克隆进化,本研究对27个原发性肿瘤区域,7个匹配的正常组织和7个ADC病例的6个淋巴结转移进行了整体DNA甲基化分析。结果表明,表观基因组特征的广泛变化有助于原发性ADC和淋巴结转移的分子和表型异质性。

16-IF4+:非肿瘤的疾病挖掘 利用WGCNA分析挖掘孕前BMI和新生儿体重的关键基因

18-IF6+:纯生信分析甲基化和基因表达整合鉴定三阴性乳腺癌的预后标志物和药物靶标

19-干细胞、分子靶向治疗和EMT生物过程联合构建多发性脑瘤预后模型

20-基于全基因组分析探索MAPK失调与免疫应答的关系


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/7922724.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-11
下一篇 2023-04-11

发表评论

登录后才能评论

评论列表(0条)

保存